0

私は2つのプロジェクト(ProjAとProjB)を持つソリューションを持っています。 ProjAはライブラリですが、ProjAはアプリケーションです。 ProjBは、3つの他のDLLファイル(C、D、E)も参照しています。 ProjB C、D、Eをビルドすると、すべてbinディレクトリに移動します。私がProjA(ProjBのみを参照する)をコンパイルすると、CとDのみがコピーされ、E.ではコピーされません。DLLファイルはあるプロジェクトのbinディレクトリにコピーされますが、もう一方のプロジェクトはコピーされません。

本当に何が起こるかわかりません。私は参照プロパティを見て、すべての3(C、D、E)は同じです(名前とパスを除く)。なぜ私はProjBがbinディレクトリにEを置くのかわからないのですが、私のアプリケーション(ProjA)がビルドするとEをローカルにコピーしませんか?

+0

ここにvb/csprojを投稿できますか? – Mrchief

答えて

1

私はここで外に出て野生の推測を行います:参照EはプロジェクトBによって直接使用されないため、参照はプロジェクトBの出力のPEマニフェストには表示されません。

多分あなたは、プロジェクトB用のDLLを開くとしたら、あなたは意志、これらのアセンブリは、しかし、プロジェクトB.

のbinフォルダにコピーされている理由を説明し、プロジェクトBでの参照に「ローカルコピー」を持っています参照Eがアセンブリの依存関係としてリストされていないことに注意してください。 Visual Studioの/ MSBuildがアセンブリBのプロジェクトAの使用量が代わりに

プロジェクトBに

を参照Eのクラスや機能を使用し、問題を解決するにはE.

が必要であることを推測することはできません、プロジェクト& Bを持っていますそれらのアセンブリを共通のフォルダに出力します。ヒント:ビルドのパフォーマンスを向上させるには、このシナリオで「ローカルコピー」をオフにします。


更新:

私はあなたの問題を再現するには、いくつかの異なる方法を試してみたが、私が持っている最も近いが、このpost which suggests that it may be a path probing problemからでした。提供されている例では、AからBへの参照は静的ファイル参照(bin \ Debug \ ProjB.dll)で、依存関係(E)はCopy Local = Falseとして定義されています。サンプルプロジェクトは、すべての依存関係がコンパイルされ、zipにパッケージ化されるように設定されています。

Aをコンパイルすると、記述した問題が顕著になります。修正は、ProjBのEのリファレンスを "Copy Local = True"に変更することですが、この変更を加えて再コンパイルすると、違いはありません!どうして?

"Copy Local"の設定を変更しても、ProjBの出力は実際には変更されないようです。また、ProjB内の参照は静的な参照であるため、変更が発生したことを認識しません。ビルドが正常にコンパイルされるまでクリーンを実行するまではありません。

これが役立つかどうかわかりません。そうでなければ、幸運。

+0

実際に私はプロジェクトBでEを大量に使用しています。それはコピーではないことがわかったのです。ライブラリはProjBのビンにコピーされているのに対し、ProjAのビンにはコピーされないので、私のアプリケーションにはランタイムエラーがあります。 –

+0

面白い!私はランタイムエラーが予想されたが、私の前提はCまたはDがEを必要としていたが、Eの型はBに明示的に使われていなかったため、直接的なIL参照はなかった。私はこの問題を再現したいと思いますが、参考文献の詳細をいくつか共有できますか? – bryanbcook

+0

私はすぐに何かを試してみるつもりです。私は、同様のプロジェクト設定(新鮮できれいな)で新しいソリューションを作成し、何が起こるかを見ていきます。私はそれがちょうどEで何かファンキーなことかもしれないという気持ちがあります。 –

関連する問題