ソリューションに A と B という 2 つのアンマネージ C++ DLL があり、A には B への参照があります。B.dll を A のアプリケーション ディレクトリにコピーしたいと考えています。A の参照で [ローカルにコピー] をクリックすると、プロジェクト プロパティの [Framework and References] タブでは、true に設定されているように見えますが、[適用] をクリックすると値が false に戻ります。ここで何か考えはありますか?
3 に答える
しばらく経ちましたが、この問題に遭遇したところ、次の接続ページを見つけました。
既知の問題のようです。プロジェクト ファイルを編集することで回避できます。
@HoopSomuah 接続のバグを回避し、[ローカルのコピー] 設定を固定しても、プロジェクトの B への参照に設定したフラグに関係なく、Visual Studio は依存ライブラリまたは dll を A のターゲット フォルダーにコピーしません。 A.
Visual Studio 2015 でのアンマネージ リファレンスの処理は依然としてうまくいかず、2017 も同様に悪いと確信しています。
@JasonFry @HansPassant が指摘したように、ビルド後のイベントをプロジェクト A に追加して、B.dll を A.dll と同じフォルダーにコピーする必要があります。
Visual Studio には、プロジェクト A から B.dll へのパスを簡単に取得する方法が用意されていないため、プロジェクト B にそのパスをテキスト ファイルに書き込み、プロジェクト A にそのテキスト ファイルからパスを読み取らせ、B をコピーさせることができます。 .dll を A.dll と同じフォルダーに入れます。
B のプロジェクト プロパティを開き、これをビルド後のイベントとして追加します。
echo $(TargetPath)>$(SolutionDir)References.txt
A のプロジェクト プロパティで、ビルド後のイベントとして追加します。
for /f %%f in ($(SolutionDir)References.txt) do xcopy /y %%f $(TargetDir)
A の出力フォルダーにもコピーする必要がある 3 番目のプロジェクト C.dll がある場合は、同様のビルド後のイベントを C のプロジェクト プロパティに追加します (> ではなく >> に注意してください。上書きではなく、テキスト ファイルに追加されます)。それ):
echo $(TargetPath)>>$(SolutionDir)References.txt
私はしばらく前にこの問題を抱えていました。基本的に、これは true であるため、ファイルをコピーし、自身を false に設定して再コピーしないようにします。