Nuget

2012-07-30 8 views
5
のために、ビルド後でバージョンを取得

コード:私はちょうどNuGetで遊んで始め、私のNuGetパッケージのバージョン番号を含める方法を知りたいきNuget

if $(ConfigurationName) == Release (
    cd $(ProjectDir) 
    nuget spec Entities -f 
    nuget pack DeusPak.Entities.csproj -Prop Configuration=Release 
    nuget push DeusPak.Entities.$(version).nupkg $(MYGET_API_KEY) -Source  http://www.myget.org/F/lojaali/api/v2/package 
) 

。私は現在、ポストビルドのイベントにそれをコーディングしていますが、これは明らかに私がやりたいことではありません。誰でも助けることができますか?

これは私の現在のビルド後のイベントです:

if $(ConfigurationName) == Release (
    cd $(ProjectDir) 
    nuget spec Dev-f 
    nuget pack Dev.csproj -Prop Configuration=Release 
    nuget push Dev.1.0.0.0.nupkg $(MYGET_API_KEY) -Source  http://www.myget.org/F/api/v2/package 
) 

アップデート:

if $(ConfigurationName) == Release (
    cd $(ProjectDir) 
    nuget spec Dev -f 
    nuget pack Dev.csproj -Prop Configuration=Release 
    nuget push Dev.$(version).nupkg $(MYGET_API_KEY) -Source  http://www.myget.org/F/api/v2/package 
) 

OK、私は正しい自動インクリメントバージョン番号でDLLを構築するために管理しています

しかし、このバージョンは私のMyGetパッケージのリストには表示されません。どのように表示してダウンロードできるのですか?または、これは「パッケージを追加」をクリックして手動でのみ行うことができますか?

+0

コマンドはOKに見えます。 pkgをプッシュしてMyGetフィードで使用できるようにするまでには少し時間がかかることがあります。しかし、これは数分以上かかることはありません。また、プレリリースパッケージ(1.0.0-alphaなど)をプッシュする場合は、NuGet Package Managerコンソールで-IncludePrereleaseスイッチを使用するか、フィードを参照する際にドロップダウンリストのIncludePrereleaseオプションを選択する必要がありますVSIX UIダイアログ。 pkgが正常にプッシュ(ログなし)していますか? –

答えて

6

あなたの質問では明確ではありませんが、と仮定すると、パッケージのバージョンをアセンブリのバージョンと同期させたい場合は、単にAssemblyVersion属性をプロジェクトのAssemblyInfo.csファイルで管理できます。

[assembly: AssemblyVersion("1.0.0")] 

またはあなたが自動生成しますが、アセンブリのバージョンから外れ、そして唯一のパッケージのバージョンを指定したい場合は、あなたがAssemblyInformationalVersion属性を使用することができます数字

[assembly: AssemblyVersion("1.0.0.*")] 

を構築使用したい場合AssemblyInfo.csファイル。

[assembly: AssemblyInformationalVersion("1.0.0")] 

また、あなたが使用して質問どのようなバージョニング戦略から明確ではないのですが、私は(最初の3つのバージョン番号は最も関連性のある)あなたがSemantic Versioningを適用したいと仮定します。一般的に、NuGetパッケージを自動作成する場合は、csprojディレクトリにtokenized nuspec fileを作成することをお勧めします。これにより、パッケージのメタデータをより簡単に操作できます。 FYI、それを支援するためにも、NuGetパッケージがあります:MyProject.csprojをターゲットとする場合

Install-Package NuSpec 

NuGetは(それがMyProject.nuspecと呼ばれることを確認してください)このnuspecを探します。

<package> 
    <version>$version$</version> 
    ... 
</package> 

また、私はこの記事でMyGetブログでこれを説明した:http://blog.myget.org/post/2012/04/27/NuGet-version-token-explained.aspx

あなたが単に構築する前に、アセンブリのバージョンを変更を想定し、nugetパックはその後、十分に良いことがあり呼び出すポストビルド。

nuget pack MyProject.csproj 
+0

こんにちは、毎回投稿ビルドでアセンブリバージョンを手動で変更したくないのですが、バージョン番号を自動的に取得するトークンを渡したいと思っています。これは私が変更したい行ですが、構文についてはわかりません:nuget push Dev.1.0.0.0.nupkg $(MYGET_API_KEY)-Source http://www.myget.org/F/api/v2/パッケージ – user517406

+0

3桁のバージョン(例: "1.0.0")を追加しても、nugetは '1.0.0.0.nupkg'で終わるファイルを生成します。私はおそらく何かを逃している?私のassemblyinfoファイルは 'AssemblyVersion'と' AssemblyFileVerion'属性しか持たず、どちらも同じ値を持っています。 – julealgon

4

これはポストビルドと同じくらい良いことがあり、あなたの後のビルドイベント、で$(バージョン)変数を得ることができる方法です。

<Target Name="AfterBuild" Condition="'$(Configuration)' == 'Release'"> 
    <GetAssemblyIdentity AssemblyFiles="$(TargetPath)"> 
     <Output TaskParameter="Assemblies" ItemName="AssemblyVersion" /> 
    </GetAssemblyIdentity> 
    <Exec Command="echo %(AssemblyVersion.Version)" /> 
    <Message Text="Released %(AssemblyVersion.Version)" Importance="high" /> 
</Target> 

VSはUIを提供しないので、.csprojファイルを変更する必要があります。

5

私はCarlos JLópezが提供するソリューションをちょっと拡張して、実際にNuGetを呼び出してバージョンパラメータを提供するAfterBuildスクリプトを使用しました。

私の場合、実際にAfterBuildスクリプトの前に発生するポストビルドイベントに「cd $(ProjectDir)」を追加しました。

乾杯は、

<Target Name="AfterBuild" Condition="'$(Configuration)' == 'Release'"> 
     <GetAssemblyIdentity AssemblyFiles="$(TargetPath)"> 
      <Output TaskParameter="Assemblies" ItemName="AssemblyVersion" /> 
     </GetAssemblyIdentity> 
     <Exec Command="$(SolutionDir)\.nuget\nuget pack $(ProjectName).nuspec -Version %(AssemblyVersion.Version)" /> 
     <Message Text="$(SolutionDir)\.nuget\nuget pack $(ProjectName).nuspec -Version %(AssemblyVersion.Version)" Importance="high" /> 
    </Target>