私はWinFormsアプリケーションとクラスライブラリをビルドするためにVisual Studio 2010とC#を使用しています。私は、すべての製品に共通のライブラリをいくつか使用しています。私のアセンブリはGACではありません。すべてのプロジェクトはそれぞれのbin \ Debugフォルダの出力を共通のリポジトリフォルダにコピーし、すべてのアセンブリ参照はそのリポジトリフォルダをポイントします。Visual Studio 2010アセンブリリファレンス問題
:たとえば、Common.DAL.dll、Common.BLL.dll、Product.DAL.dll、Product.BLL、とは、product.exe
アセンブリ間の参照は、一般的にこのようなものです
- は、product.exeがProduct.BLL
- Product.BLLはCommon.BLLとProduct.DALへの参照を含むへの参照を含む
- Product.DALはCommon.DAL
- Commの参照を含みますこれらすべてが同じ溶液中に含まれている場合on.BLLがCommon.DAL
にrefrenceを含み、ビルドdepenciesはこのようなものです:
- Common.BLLはCommon.DAL
- に依存しますProduct.DALはCommon.DALに依存 Product.BLLがCommon.BLLとProduct.DAL
- は、product.exeに依存
- が
- Common.DAL
- Common.BLL
- Product.DAL
- Product.BLL
- は、product.exe
多くの場合、アプリを実行しようとすると、次のエラーが表示されます。
ファイルまたはアセンブリ 'Common.DAL、Version = 1.0.0.0、Culture = neutral、PublicKeyToken = 4e5249f2e70e1da8'またはその依存関係の1つを読み込めませんでした。システムは、指定されたファイルを見つけることができません。
ソリューションから構築されたアセンブリのすべてが、Product.exeのbin \ Debugフォルダに終わるわけではないという事実にまで、私は問題をトレースしました。私は解決策をきれいにし、それを再構築する場合
、ファイルはこのようなものを表示されます。
- Common.DAL \ binに\デバッグCommon.DAL.dll
- Common.BLL \ビンが含まれています\デバッグにはCommon.BLL.dllとCommon.DAL.dllが含まれます。
- Product.DAL \ bin \ DebugにはCommon.DAL.dllとProduct.DAL.dllが含まれます。
- Product.BLL \ bin \ DebugにはCommon.BLLが含まれています。 dll、Common.DAL.dll、 Product.BLL.dllおよびProduct.DAL。dll
- Product.exe \ bin \ Debugには、Product.exe、Product.BLL、および Product.DALのみが含まれています。 共通アセンブリがありません。したがって、 Product.exeを実行すると、上記のエラーが発生します。
私はすべてのプロジェクトとプロパティのプロパティをチェックしました。彼らはすべて.NET Framework 4を使用しています。私のアセンブリへのすべての参照は、 'Specific Version'プロパティをfalseに設定し、 'Copy Local'プロパティをtrueに設定しました。
私は力は、product.exeプロジェクトに共通のアセンブリへの参照を追加することでは、product.exe \ binに\デバッグにコピーする行方不明アセンブリすることができますが、は、product.exeが明示的にを使用していないので一般的なアセンブリでは、これは解決策よりもむしろkludgeのように感じます。
MSDNとVisual Studioのドキュメントを参照して、参照されているアセンブリのコピーや影響を調べることができたかどうかを確認しましたが、同様の問題があるので検索しましたが、
私はどこへ行くか、次に何をするのか迷っています。
場しのぎ見えるようにあなたの他の(私は「場しのぎ」あえて言う)の要件(溶液につき1つのプロジェクト)のように思えますリファレンス?どこでもプロジェクト参照を使用していても、まだこの問題がありますか? – McKay
いくつかのプロジェクトでこれが発生し、 "copylocal = true"を含む最上位のアセンブリ(* .exeまたはウェブサイト)からすべてのアセンブリへの参照を持つことになりました。これは回避策であり、そのような動作の本当の原因が何であるかも疑問です。 –
@McKayのプロジェクト参照は、プロジェクトがすべて同じソリューションに存在する場合にのみ有効です。多くの場合、すべてのプロジェクトが同じ解決策にはなりません。 Common.DALとCommon.BLLアセンブリは通常、Product.exeソリューションには含まれず、Product.DALプロジェクトとProduct.BLLプロジェクトであっても、必ずしもProduct.exeソリューションに存在する必要はありません。 –