2017-12-04 9 views
0

フォルダにアセンブリの.dllがたくさんあります。私はプロジェクトを開き、それらのファイルへの参照を追加します。Visual Studio 2017の参照がフードの下で変更されています

その他、これらのdllを出力フォルダ(Debug/Release/Whatever)にコピーし、参照先を変更して、元のパスをprjファイルに保存します。

結果:1つ、いくつかのdllをすべて更新します。Visual Studioではローカルdllだけを使用したいので注意しません。そして、魔法に追加するために、私がRebuild(CleanとBuildを行う)を行うと、Cleanはコピーされたファイルを削除したため、参照はもう有効ではありません。

なぜこのように動作していますか?

+0

他のVSプロジェクトの出力であるコンポーネントを参照する場合は、作成した出力ではなくプロジェクトを参照することをお勧めします。いずれにしても、VSをプロジェクトの出力フォルダにコピーしないように指示するには、これらの参照に対して「ローカルコピー」をオフにすることができます(「のプロパティ」を参照)。 – Filburt

+0

他のプロジェクトを参照することは常に最悪でした。会社全体にネットワークとコードバージョン管理システムを構築させ、誰もがすべてを見ることができるようにしています。あなたのPCに負担をかけるだけです。ソフトウェアの実行時にdllが見つからないため、ローカルコピーオプションは機能しません。 Visual Studioでは、元のソースからローカルをコピーし、その参照を保持して、一度ローカルにコピーしてから内部的に参照を変更するのではなく、ローカルでコピーを続ける必要があります。 – motoDrizzt

+0

2番目の見方では、VSを強制的に "すべてのビルド"で強制的に "コピー常に:真"オプションが欠けていると思われますが、プロジェクトを実行するたびにVSに参照を引き出すように指示する方法はありません。 – Filburt

答えて

1

[OK]をランダムに答えを見つけた、それはちょうど悪い設定名の問題です。

まず、Visual Studioには「ローカルコピー」というオプションがあります。これを「いいえ」に設定すると、トリックが実行されますが、動作しません(これは明白です)。出力フォルダにdllをコピーしないで、ソフトウェアを実行しても見つからない場合(GACのアセンブリについて話している場合を除きますが、それは別の話です)。

それ自体は、Visual Studioは元のソースからローカルをコピーし、その参照を保持する必要があります。代わりに、出力フォルダに一度コピーし、その瞬間から出力フォルダへの参照が内部的に変更されます。 prjファイルに元の参照を保持していますが、無視する(プロジェクトやソリューションをクリーンアップしてDLLがなくなりコンパイルされなくなった場合)。

解決策はありますか? 「特定のバージョン」と表示されている設定。その名前にもかかわらず、あなたが参照しているDLLの特定のバージョンの使用を強制するものではなく、Visual Studioに(Copy Local = Yesと同様に)「Copy Always」と同等のことを伝えます。

関連する問題