web-dev-qa-db-ja.com

DLLプロジェクトビンにコピーしない参照

プロジェクトA参照プロジェクトB、およびProject Bは外部DDLを参照します(NuGetを使用して復元)。 DLLはProject Aのbinフォルダー(- プロジェクトBのDLL):

DLL References Copied To Bin

私の場合、Project Aを実行すると、次の例外がスローされます:

ファイルまたはアセンブリ 'PostSharp、バージョン= 3.2.18.0、Culture = neutral、PublicKeyToken = b13fd38b8f9c99d7'またはその依存関係の1つをロードできませんでした。システムは、指定されたファイルを見つけることができません。

DLLはProject Aのビンにコピーされていません。他のすべての外部Project Bからの参照は正常にコピーされているため、混乱を招きます。

Copy Localは、関連するすべての参照に対してtrueに設定されます。例:

Copy Local Reference

どうすればいいですか?

注:Visual Studio 2013を使用します。

38
Dave New

私が見つけたオプションは次のとおりでした:

  • プロジェクトAでPostSharpへの参照を追加します。
  • コンパイラが参照が使用されていることを検出できるように、プロジェクトBにダミーコードを追加します。
  • ビルドイベントを追加して、DLLを強制的にコピーします。

上記のソリューションはどれも好きではありません。私の意見では、これらはハッキングであり、長期的にはより保守不可能なソリューションになります。

共通の出力ディレクトリを使用して問題を修正しました。これは多くの人に推奨されるソリューションのようです。また、ビルド時間が大幅に短縮されました。 このStackoverflowポスト を参照してください。

21
Dave New

この問題に遭遇したのは、プロジェクトの名前を変更したがアセンブリ名は変更しなかったためです。ソリューション内の別のプロジェクトのアセンブリ名と同じでした。

0
AbleArcher

プロジェクトBにダミー(未使用)コードを追加し、DLL required。

したがって、コンパイラはDLL=をプロジェクトAの出力にコピーする必要があると推測します。

0
user10642724