Nugetパッケージでリリース前のパッケージ

Nugetから取得するパッケージは基本的には、安定バージョンですが、プレリリース版(β版とか)も取得出来ます。

プレリリース版は、その名の通り次期バージョンで、公開する側からするとβ版やα版の位置づけです。
プレリリース版の便利なところは、使う側が任意で選択しない限り選択肢として出てこないとこです。
そして、安定版が公開されたらパッケージのアップデートを行えば最新になる楽チン仕様

検証では、自分の環境にNugetサーバーを立てて行いました。
使用したバージョンは下記の通り

NuGet.Server v2.8.60318.667
Nuget.exe v2.8.5

VisualStudioからみたリリース前バージョン

f:id:orzmakoto:20150524144349p:plain

リリース前バージョンの公開方法

リリース前のパッケージとして認識させるには、バージョンの末尾にプレフィックスを付与するだけです。

例)
1.0.0-prereleace
ここでは、-prereleaceとしていますが"-beta"や"-dugfix"などで任意の文字列で構いません。

ただし、Nugetパッケージ管理上のバージョニングと.netのバージョニングの仕様が異なるので不都合が生じることがあります。

Nugetのバージョニング
[メジャー].[マイナー].[パッチ]

.Netのバージョニング
[メジャー].[マイナー].[ビルド番号].[リビジョン]

Nugetのバージョニングは、"Semantic Versioning 2.0.0"とやらに準拠しており3項目から構成されています。
この違いを無視して、プレリリース版用に末尾にプレフィックスをつけると、パッケージファイル(.nupkg)を作成する段階でエラーになります。

警告: パッケージ 'ClassLibrary1' に 1 個の問題が見つかりました。

問題: セマンティック バージョンの使用
説明: バージョン "1.0.0.0-beta" は、セマンティック バージョンのガイドラインに従
っていません。
ソリューション: nuspec ファイルを更新するか、AssemblyInformationalVersion アセン
ブリ属性を使用して、http://semver.org の説明に従ってセマンティック バージョンを
指定してください。

誤) 1.0.0.0-beta
正) 1.0.0-beta

それを踏まえてリリース前のパッケージを作成します。

プロジェクトファイルからパッケージを作成する場合(.nupkg)

AssemblyInfo.csに"AssemblyInformationalVersion"を追加します。

// すべての値を指定するか、下のように '*' を使ってビルドおよびリビジョン番号を 
// 既定値にすることができます:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("1.0.0.0")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: AssemblyInformationalVersion("1.0.0-beta")]

nuspecファイルをからパッケージを作成する場合(.nupkg)

メタデータ(XML)ファイルを作成する際に、バージョンの末尾にプレフィックスを付与します。

<?xml version="1.0" encoding="utf-8"?>
<package xmlns="http://schemas.microsoft.com/packaging/2011/10/nuspec.xsd">
    <metadata>
        <id>ClassLibrary1</id>
        <version>1.0.0-beta</version>
        <title>ClassLibrary1</title>
        <authors>Ninomiya</authors>
        <owners>Ninomiya</owners>
        <requireLicenseAcceptance>false</requireLicenseAcceptance>
        <description>Description</description>
        <copyright>Copyright © Ninomiya 2015</copyright>
    </metadata>
    <files>
        <file src="lib\net451\ClassLibrary1.dll" target="lib\net451\ClassLibrary1.dll" />
    </files>
</package>

パッケージ(.nupkg)をパブリッシュ

nuget push ClassLibrary1.1.0.0-beta.nupkg -s http://********/ {apikey}

(∩´∀`)∩ワーイ

ただこのリリース前のパッケージバージョン問題って抜け道がありました(´・ω・`)
パッケージ(.nupkg)を作成するのに、コマンドラインではなくNuGet Package Explorerからメタデータを編集して、[FILE] > [Export...]とすれば、”1.0.0.0-beta”でもパッケージファイルが作成出来てそのままパブリッシュできるんですよね。

NuGet Package Explorer
f:id:orzmakoto:20150524160158p:plain

VisulaStudio パッケージの管理
f:id:orzmakoto:20150524160410p:plain


検証には、自分の環境にNugetサーバーを立てて検証しました。
簡単でいいですね。とってもいい。