2つの別々の.NETソリューションがあります。
- 最初のソリューションのビルドを実行すると、最終製品である一連のDLLが生成されます。これらのDLLは、NuGetパッケージを介してお客様に提供されます。
- 2番目のソリューションは製品テストソリューションとして機能します。NuGetパッケージがインストールされ、ビルドおよび実行されます。したがって、お客様とまったく同じように製品を使用します。
ここでの課題は、できればこの製品テストソリューションのビルド中に、最新のNuGetパッケージを製品テストソリューションに自動的にインストールする方法があるはずです。
同様の質問からのアイデアに基づいて、私は製品テストソリューションを構成することでこれまでに得ました:
- まず、NuGetパッケージの復元を有効にしました。これにより、packages.configファイルで定義されたバージョンのパッケージがビルド前にNuGetによって自動的にダウンロードされるため、VCSから「packages」ディレクトリを完全に削除できます。
- 次に、VisualStudioで次のビルド前イベントを追加しました
$(SolutionDir).nuget\nuget update -prerelease $(ProjectDir)packages.config
。これにより、ビルド中にNuGetパッケージの最新バージョンを取り込むことができます。
私は現在、上記のシナリオを使用して、Visual Studioを使用してローカルビルドを実行し、TeamCityを使用して無人ビルドを実行しています。このソリューションは一見両方のシナリオで機能するように見えますが、実際には期待した結果は得られません。製品テストソリューションをビルドすると、bin
ディレクトリに最新バージョンのDLLは取得されず、最新バージョンのみが取得されます。 -1バージョン。
問題は、nuget update
コマンドがpackages.config
と.csproj
ファイルを含むすべてを期待どおりに更新するにもかかわらず、それらの新しいコンテンツがビルドによって取得されないことです。したがって、私の推測では、ファイルのHintPath設定は.csproj
まだ「ビルド前」の状態を反映しています。したがって、古いDLLがbin
ディレクトリにコピーされます。ファイルが1回だけ処理されると仮定し.csproj
ます。つまり、ビルド前イベントがトリガーされる前であり、ビルド前イベントによって行われた変更は、次のビルドまで無視されます。
私は次の解決策を検討しました。
- どうやらプレビルドは十分に「プレ」ではありません。コマンドを挿入できるさらに早い時点があれば
nuget update
、上記の解決策はおそらく機能します。 - ReferencePathを定義することで、.csprojファイルのHintPath-sをオーバーライドできることを読みました。しかし、正しいパスを簡単に理解できるか、ビルドがそれを取得できるように十分に早く設定できるかは疑問です。
- 回避策として、ビルドを2回実行できます。TeamCityで製品テストソリューションのビルドステップを複製し、VisualStudioで常にローカルでソリューションを2回ビルドできます。
ビルド中にNuGetパッケージを最新バージョンに自動的に更新する方法を誰かが理解しましたか?