2012-03-20 31 views
36

私は2つのリポジトリを持っています。もう1つのリポジトリからコンパイルされたライブラリが必要です。私は更新されたライブラリのためにrepo1を手動でチェックし、repo2にコピー/コミットしたくない。なぜならそれはばかだからだ。必要なライブラリをビルドするたびにNuGetパッケージを作成し、内部のNuGetサーバーに公開しています。 repo2のプロジェクトはこれらのNuGetパッケージを参照することができ、すべてが(ほとんど)動作しています。NuGetパッケージを最新の利用可能なバージョンに自動的に更新する方法

この最後のハードルは、repo2のプロジェクトでNuGetパッケージを自動的に更新することです。 repo1のライブラリがいつ更新されるのか分からないので、repo2のプロジェクトでNuGetパッケージを自動的に更新する何らかのビルドイベントが必要です。私は現在、ビルド前のイベントを持っていますが、packages.configファイルにはインストールされているパッケージのバージョン番号が含まれているので、repo2でファイルを変更し続けます(packages.configファイルが更新されます)。

質問:私のrepo2 VCS​​をマックアップすることなくNuGetパッケージを自動的にアップグレードするにはどうすればよいですか?スコット氏は、Here(コメント)では、パッケージのアップグレードをCIビルドに引き継ぐことができると述べていますが、彼は方法と私の現在のソリューションが面倒であるとは特定していません。私は行方不明に組み込まれている方法ですか?または、より良い回避策ですか?

+3

ように注意してください経由でそれを行う方法について説明します。ライブラリが変更され、ソフトウェアが壊れる可能性があります。 http://blog.heroku.com/archives/2011/6/28/the_new_heroku_4_erosion_resistance_explicit_contracts/ –

+8

これは、私たちの自動化されたテストスイートのためのものです。 – themilkyninja

+0

@themilkyninjaあなたは今までに解決策を手に入れましたか?私はまったく同じ問題に直面している。 – stevebot

答えて

3

おそらく、NuGetパッケージ機能(ここでは情報のビット:http://docs.nuget.org/docs/workflows/using-nuget-without-committing-packages)復元活用でき

プロジェクトのビルド時に、それがpackages.configからパッケージを再インストールする「nuget.exe -install」を呼び出します。 私はそれを試していませんが、同じようにnuget.targetsファイルにUpdateコマンドを追加することができます。 (あなたはnuget.exeのアップデートと既存のnuget.exeのインストールの両方を呼び出す必要があります)。

+4

私はそれを見て、ソリューションレベルパッケージフォルダ(実際のプロジェクトではない)にパッケージを復元しただけです。私はプロジェクトにファイルをチェックしたくないし、 'nuget.exe update'も' nuget.ext install'もすべてのファイルをプロジェクトに戻さない。基本的に私が探しているのは、[この機能](http://nuget.codeplex.com/workitem/1239)です。 – themilkyninja

-1

あなたはこのように「BeforeBuild」ターゲットを実行するために、あなたの.cspojファイルを変更することができますことを

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

注:u'llウルソリューションディレクトリに「Nuget.exe」を持っている必要があり

+1

プレビルドのステップに入れるほど簡単ではありません。実際にはそれは実際には遅すぎます:http://stackoverflow.com/questions/15027256/cannot-automatically-update-a-nuget-package-to-the-latest-version-during-build –

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> 
関連する問題