0

多くのクラス ライブラリ プロジェクトを含むソリューションを検討してください。それぞれに多数の NuGet パッケージがインストールされており、これらのプロジェクトごとに 1 つの単体テスト プロジェクトがあります。クラス ライブラリ プロジェクトの参照が に構成されていることを念頭に置いてCopy Local = false、単体テスト プロジェクトに少なくとも元のプロジェクトからのすべての参照が常に含まれていることを確認するにはどうすればよいですか?

私たちはすでに何度かこの問題に悩まされてきました。どこからともなく、dll が見つからないためにナイトリー ビルドが失敗します。何が起こったのかを確認すると、通常、誰かが新しいパッケージまたは参照をプロジェクトに追加しましたが、単体テスト プロジェクトに同じ参照をインストールしていませんでした。開発マシンでは、各プロジェクトがその出力を別のフォルダーにコピーするため、この問題は顕在化しない傾向があります。ただし、TFS でビルドする場合、MSBuild はオーバーライドされ、すべての出力が同じフォルダーに配置されます。

Copy Local = false直接実行する必要のないすべてのものに戦略を使用しています (つまり、テスト プロジェクトと Web アプリケーションのみがローカルのすべての参照をコピーするように構成されています)。これは、不要な dll のコピーを回避し、ビルド プロセスを高速化するために行われました。を使用するCopy Local = falseと、参照先のプロジェクトから自動的にコピーされないため、すべての参照を各プロジェクトに明示的に追加する必要があります。単体テスト プロジェクトの場合、これは通常packages.config、テスト プロジェクト内のファイルに、元のプロジェクトのすべてのパッケージに加えて、モック フレームワークなどのテスト固有の dll が含まれていることを意味します。

個人的には、すべての参照を明示的に指定する必要があることを好みます。これにより、誰かが何が起こっているのか、何が何に依存しているかをより明確に確認できるようになるからです。過去にもデフォルトで問題があったCopy Local = trueので、元に戻すのはあまり好きではありません。しかし、時折、誰かが必要な参照を追加していないことに関連する問題に出くわすことがあります。

特定のプロジェクトの依存プロジェクトからのすべての参照を持たないようにすることができないように、何らかの方法でこれを強制できますか? 理想的には、それがコンパイル エラーであることを望みますが、どのような種類の強制も有益です。ソリューション内のすべてのプロジェクトが互いに参照するときに NuGet パッケージのように動作する場合は非常にクールです。オリジナルパッケージ。

4

0 に答える 0