2012-07-30 85 views
5

代碼:獲取在生成後版本的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 
) 

我剛開始玩弄的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軟件包列表中。我如何獲得它在那裏顯示,以便它可以下載?或者只能通過點擊「添加包」手動完成?

+0

的命令看起來OK。在推送pkg並在MyGet供稿中提供它之間可能存在一個小的延遲。這不應該超過幾分鐘。還要記住,如果您推送預發佈軟件包(例如1.0.0-alpha),則必須使用NuGet軟件包管理器控制檯中的-IncludePrerelease開關,或者在瀏覽Feed時通過選擇下拉菜單中的IncludePrerelease選項VSIX UI對話框。你確定pkg推送成功嗎(沒有日誌)? – 2012-08-01 17:27:36

回答

6

您的問題並不清楚,但假設您想要將包的版本與程序集的版本同步,您可以簡單地管理項目的AssemblyInfo.cs文件中的AssemblyVersion屬性。

[assembly: AssemblyVersion("1.0.0")] 

,或者如果你想使用自動生成的內部版本號

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

如果你想從組件的版本偏離,只有指定包的版本,可以使用在該AssemblyInformationalVersion屬性AssemblyInfo.cs文件。

[assembly: AssemblyInformationalVersion("1.0.0")] 

這也是從這個問題你用的什麼版本管理策略不清晰,但我會假設要應用Semantic Versioning(其中第3版本號是最相關的)。一般來說,當自動創建NuGet包時,我建議您在csproj目錄中創建一個tokenized nuspec file,這樣您可以更輕鬆地操作包元數據。僅供參考,甚至有一個NuGet包,以幫助您的是:

Install-Package NuSpec 

的NuGet會尋找這個nuspec(確保它被稱爲MyProject.nuspec)針對MyProject.csproj時。

<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) - 來源http://www.myget.org/F/api/v2/軟件包 – user517406 2012-08-01 06:49:46

+0

即使我添加3位數字的版本(例如「1.0.0」),nuget會生成一個以1.0.0.0.nupkg結尾的文件。我是否錯過了一些東西?我的assemblyinfo文件只有'AssemblyVersion'和'AssemblyFileVerion'屬性,並且它們的值都是「1.0.0」。 – julealgon 2015-01-23 18:48:00

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> 

所以你將不得不修改你的.csproj文件,因爲VS不提供一個用戶界面。

5

只是擴展了Carlos JLópez提供的解決方案,我使用AfterBuild腳本實際調用NuGet並提供版本參數。

在我的情況下,我還在後構建事件中添加了「cd $(ProjectDir)」,這實際發生在AfterBuild腳本之前。

乾杯,

<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> 
相關問題