2012-03-20 138 views
36

我有兩個存儲庫,我需要從另一個存儲庫中編譯庫。我不想手動檢查更新庫的repo1,並複製/提交到repo2,因爲這很愚蠢。我已經在每個必要的庫的構建上構建了NuGet包,並將它們發佈到內部的NuGet服務器。然後repo2中的項目可以引用這些NuGet包,並且一切都(幾乎)工作。如何自動更新NuGet包到最新的可用版本

對此的最後一道障礙是自動更新repo2項目中的NuGet包。由於我不知道repo1中的庫何時會更新(而且我不需要),因此我希望repo2中的項目能夠自動更新NuGet包。我目前只有一個預生成事件,但由於packages.config文件包含已安裝軟件包的版本號,因此我不斷收到repo2中的修改文件(packages.config文件得到更新)。

所以我的問題是:有什麼方法可以自動升級NuGet軟件包而不會浪費我的repo2 VCS​​? ScottGu說Here(註釋中)可以將包升級掛接到CI構建,但他沒有指定我的當前解決方案是如何混亂的。有沒有內置的方式,我失蹤了?還是有更好的解決方法?

+3

要小心。這些庫可能會改變並破壞你的軟件。 http://blog.heroku.com/archives/2011/6/28/the_new_heroku_4_erosion_resistance_explicit_contracts/ – 2012-03-27 10:51:04

+8

這就是我們的自動化測試套件:) – themilkyninja 2012-03-28 00:22:49

+0

@themilkyninja你有沒有得到一個解決方案?我面臨着完全相同的問題。 – stevebot 2013-03-25 18:04:02

回答

3

你也許可以利用的NuGet包還原功能(有些信息在這裏:http://docs.nuget.org/docs/workflows/using-nuget-without-committing-packages

在項目構建,它調用「nuget.exe - 安裝」從packages.config重新安裝的軟件包。 我還沒有嘗試過,但可以用同樣的方法將更新命令添加到nuget.targets文件中。 (你必須調用nuget.exe更新和現有的nuget.exe安裝)。

+4

我看了一下,並且只將軟件包恢復到解決方案級別的包文件夾(而不是實際的項目)。我不想將文件檢入到項目中,也沒有'nuget.exe update'和'nuget.ext install'將所有文件都回收到項目中。基本上我正在尋找的是[此功能](http://nuget.codeplex.com/workitem/1239) – themilkyninja 2012-03-28 00:26:39

-1

您可以通過修改.cspoj文件執行「BeforeBuild」的目標是這樣的:

<Target Name="BeforeBuild"> 
    <Exec Command="&quot;$(SolutionDir).nuget\NuGet&quot; update &quot;$(ProjectDir)packages.config&quot; -Id your.package.id" /> 
</Target> 

需要注意的是:日子會把你需要有「Nuget.exe」在烏拉圭回合的解決方案目錄

+1

這不像將它放在預構建步驟中那麼簡單。其實這實際上已經太晚了:http://stackoverflow.com/questions/15027256/cannot-automatically-update-a-nuget-package-to-the-latest-version-during-build – 2017-09-13 08:32:33

0

這就解釋瞭如何通過的MSBuild

http://netitude.bc3tech.net/2014/11/28/auto-update-your-nuget-packages-at-build-time/

<Target Name="UpdatePackages" DependsOnTargets="CheckPrerequisites"> 
    <Exec Command="$(UpdateCommand)" 
     Condition="'$(OS)' != 'Windows_NT' And Exists('$(PackagesConfig)')" /> 

    <Exec Command="$(UpdateCommand)" 
     LogStandardErrorAsError="true" 
     Condition="'$(OS)' == 'Windows_NT' And Exists('$(PackagesConfig)')" /> 
</Target> 


<!-- Commands --> 
<UpdateCommand>$(NuGetCommand) update "$(PackagesConfig)" -source "$(PackageSources)" -id AutoUpdater $(NonInteractiveSwitch)</UpdateCommand> 
<RestoreCommand>$(NuGetCommand) install "$(PackagesConfig)" -source "$(PackageSources)" $(NonInteractiveSwitch) $(RequireConsentSwitch) -solutionDir $(PaddedSolutionDir)</RestoreCommand> 

<BuildCommand>$(NuGetCommand) pack "$(ProjectPath)" -Properties "Configuration=$(Configuration);Platform=$(Platform)" $(NonInteractiveSwitch) -OutputDirectory "$(PackageOutputDir)" -symbols</BuildCommand> 

<!-- We need to ensure packages are restored prior to assembly resolve --> 
<BuildDependsOn Condition="$(RestorePackages) == 'true'"> 
    RestorePackages; 
    UpdatePackages; 
    $(BuildDependsOn); 
</BuildDependsOn> 
相關問題