5

コード:

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
)

NuGet を使い始めたばかりで、NuGet パッケージにバージョン番号を含める方法を知りたいです。私は現在、それをビルド後のイベントにハードコーディングしていますが、これは明らかに私がやり続けたいことではありません。誰でも助けることができますか?

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

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
)

アップデート:

OK、自動インクリメントされた正しいバージョン番号で DLL をビルドできました。

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
)

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

4

3 に答える 3

6

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

[assembly: AssemblyVersion("1.0.0")]

または、自動生成されたビルド番号を使用する場合

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

アセンブリのバージョンとは異なり、パッケージ バージョンのみを指定する場合は、AssemblyInfo.cs ファイルでAssemblyInformationalVersion属性を使用できます。

[assembly: AssemblyInformationalVersion("1.0.0")]

どのバージョン管理戦略を使用しているかという質問からも明確ではありませんが、セマンティック バージョニングを適用することを想定しています(最初の 3 つのバージョン番号が最も関連性が高い場合)。一般に、NuGet パッケージを自動作成するときは、トークン化されたnuspec ファイルを csproj ディレクトリに作成することをお勧めします。これにより、パッケージ メタデータをより簡単に操作できるようになります。参考までに、それを支援する NuGet パッケージもあります。

Install-Package NuSpec 

NuGet は、MyProject.csproj を対象とするときに、この nuspec を探します (MyProject.nuspec という名前であることを確認してください)。

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

この投稿のMyGetブログでも説明しました: http://blog.myget.org/post/2012/04/27/NuGet-version-token-explained.aspx

ビルド前にアセンブリ バージョンを変更するだけあれば、nuget pack を呼び出すポスト ビルドで十分です。

nuget pack MyProject.csproj
于 2012-07-30T16:28:33.533 に答える
4

これはビルド後のイベントで $(version) 変数を取得する方法であり、ビルド後のイベントと同じくらい良いはずです。

<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 ファイルを変更する必要があります。

于 2013-02-22T15:13:04.640 に答える