2014-01-08 4 views
14

私はあまり明確ではないタイトルのために申し訳ありません。Visual Studioは推移的な参照を最適化していますか?

Visual Studio(2010)で奇妙な動作が発生しました。 A、BおよびCの

A has a reference on B 

B has a reference on C 

C has a reference on an assembly (log4net.dll) 

ローカルコピー]真するように構成されているすべてのそのうち:

は、私は私の溶液中の3つのプロジェクトを持っていると言うことができます。

私はプロジェクトAの責任だと二つの他の開発者がプロ​​ジェクトBに責任があるとC.

プロジェクトBは、そのクラスのいずれかのプロジェクトCに存在するいくつかの(静的)メソッドを使用しています。私はCから何も使用していないBの他のクラスを使用しています。

ソリューションをビルドしたとき(プロジェクトAがメインプロジェクトとして設定されていました)、私はCとその参照されたアセンブリの結果を実際に何が起こったのは、Cの結果がBの出力フォルダにコピーされ、Aの出力フォルダになかったということでした。

この理由はわかりましたAはCからのものを(直接的または間接的に)使用していないということでした。

Visual Studioのビルトイン最適化機能ですか、何か間違っていますか?

+0

はい、MSBuildは確実にこれを行う方法を知っています。多くのプログラマは10以上のプロジェクトのソリューションを持っていますが、その機能がうまくいかなかった場合はむしろ悲惨に動作します。あなたの質問の情報は何が間違っているかもしれないというヒントを与えません。MSBuildの詳細を "Diagnostic"に変更して詳細なトレースを取得してください。これらのプロジェクトを一緒にすることから始まったばかりなので、実際にはリファレンスを使用するのではなく、簡単な説明です。 –

+0

@HansPassant:多くのプログラマは10以上のプロジェクトのソリューションを持っていますが、自動的にはそれらのうちの1つが明示的な参照のチェーン内の他のすべてのものを参照しているわけではありません。 –

+0

それはまさにポイントです。これらの鎖が存在すれば簡単ですが、実際の解決法ではほとんど行いません。しかし、すべてが正しくコピーされます。 –

答えて

2

はい、それは機能です。参照されているアセンブリの型を使用しないと、コピーされません。

+2

解決策ここでは、すべてのプロジェクトが同じフォルダを出力に使用するように、プロジェクトのプロパティを変更することができます。 – Richard

+0

こんにちは、ありがとう!あなたはそれについてどんな参考文献を持っていますか?この動作を無効にすることはできますか? – Michael

+2

@Michael http://blog.alexyakunin.com/2009/09/making-msbuild-visual-studio-to.html –

関連する問題