1

NUnit テストを実行するために、自社のビルド サーバー (CruiseControl.NET を実行) を構成中です。ファイル IO を減らしてビルド時間を改善するために、ビルドはカスタム ターゲット ファイルを使用して Copy Local をオフにするようにセットアップされます (基本的にここに示されているもの: How do I override CopyLocal (Private) setting for references in .NET from MSBUILD )。ただし、Copy Local = false は、他のアセンブリを参照するテスト プロジェクトのビルド サーバーで NUnit を実行すると、ランタイム アセンブリ バインディング エラー (「ファイルまたはアセンブリを読み込めませんでした」) を引き起こします。テスト プロジェクト。

これを機能させるために Copy Local をオンにすることはできますが、ビルドが遅くなります。Copy Local = false を維持しながら、ビルド サーバーで NUnit テストを実行できるようにするために使用できる戦略はありますか? この状況は以前に他の誰かに当てはまったと思いますが、明らかな何かが欠けています。

参考までに、CruiseControl.NET ビルド構成で各テスト プロジェクトを実行する方法を次に示します。

<exec>
     <executable>nunit-console.exe</executable>
     <baseDirectory>C:\Program Files\NUnit 2.6\bin</baseDirectory>     
     <buildArgs>C:\Source\UnitTests.csproj /xml:C:\BuildLogs;\$(ProjectName)\NUnitResults\nunit-results.xml</buildArgs>
</exec> 
4

1 に答える 1

3

実行時、たとえばテストの実行中に、参照されているアセンブリを何らかの方法で見つける必要があります。テスト プロジェクトの出力ディレクトリへの最終コピーを回避する簡単な方法は思いつきません。また、この最終コピー操作によってビルド プロセスが大幅に遅くなるとは思いません。

多くのプロジェクトと多くの依存関係を含む巨大なソリューションがある場合、アセンブリをコピーすることが問題になる可能性があります。

例:

ソリューション内に、依存するもの、依存するもの、依存するものがある 26 のプロジェクトがあるAとします。あなたはプロジェクトをテストしていますか。私が言ったように、テストの実行中に出力ディレクトリに移動する必要がないようにする方法は考えられません。ZABACBZA.dllY.dllZ

標準のプロジェクト構成を維持すると、AコンパイルされてA.dllにコピーされ[SolutionDir]\A\bin\[Configuration]\ます。次にB、にコンパイルされB.dll、一緒にコピーさA.dll[SolutionDir]\B\bin\[Configuration]\ます。次にC、 にコンパイルされ、およびC.dllと一緒にコピーされます。この方法は 26 回コピーされ、25 回コピーされます。A.dllB.dll[SolutionDir]\C\bin\[Configuration]\A.dllB.dll

この場合、私のアドバイスは、すべてのプロジェクトの出力ディレクトリが単一のソリューション出力ディレクトリを指すようにすること[SolutionDir]\binです。それが私たちのビルドプロセスをターボブーストしたものです。

于 2012-12-04T18:54:58.673 に答える