2つのリポジトリがあり、1つのリポジトリから他のリポジトリにコンパイルされたライブラリが必要です。更新されたライブラリのrepo1を手動でチェックし、repo2にコピー/コミットしたくないので、それは愚かです。 repo1を使用して、必要なライブラリの各ビルドでNuGetパッケージをビルドし、それらを内部のNuGetサーバーに公開しています。 repo2のプロジェクトはこれらのNuGetパッケージを参照でき、すべてが(ほぼ)機能しています。
これに対する最後のハードルの1つは、repo2のプロジェクトでNuGetパッケージを自動的に更新することです。 repo1のライブラリが更新されるタイミングがわからないので(更新する必要はありません)、NuGetパッケージを自動的に更新するrepo2のプロジェクトでのある種のビルドイベントが必要です。私は現在、それを実行するビルド前のイベントを持っていますが、packages.configファイルにはインストールされたパッケージのバージョン番号が含まれているため、repo2で変更されたファイルを取得し続けます(packages.configファイルが更新されます)。
だから私の質問は:repo2 VCSを汚さずにNuGetパッケージを自動的にアップグレードする良い方法は何ですか? ScottGuは ここ (コメントで)パッケージのアップグレードをCIビルドにフックすることは可能であると述べていますが、彼は方法を指定しておらず、私の現在のソリューションは乱雑です。私が欠けている組み込みの方法はありますか?またはより良い回避策はありますか?
あなたはおそらくNuGet Package Restore機能を利用することができます(ここの情報: http://docs.nuget.org/docs/workflows/using-nuget-without-committing-packages )
プロジェクトのビルド時に「nuget.exe -install」を呼び出して、packages.configからパッケージを再インストールします。私は試していませんが、同じ方法でnuget.targetsファイルにUpdateコマンドを追加できます。 (nuget.exe更新と既存のnuget.exeインストールの両方を呼び出す必要があります)。
これは、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>