Visual Studioでプロジェクトを設定して、プロジェクトの参照の1つが依存するサードパーティDLLをコピーするにはどうすればよいですか?
メインアプリケーションプロジェクトとクラスライブラリDLLがあります。メインアプリケーションはクラスライブラリDLLを参照し、DLL自体はいくつかのサードパーティDLLを参照します。メインアプリケーションをコンパイルすると、クラスライブラリDLLがその出力ディレクトリに自動的にコピーされますが、サードパーティのDLLはコピーされません。
メインアプリケーションはそれらを使用せず、クラスライブラリでのみ使用されるため、メインアプリケーションプロジェクトからサードパーティDLLへの参照を追加しません。
これは、プロジェクトプロパティウィンドウで実現できます。 Visual Studioでは、ビルドの前、または後に発生するイベントを定義できます。プロジェクトプロパティウィンドウを表示するには、ソリューションエクスプローラーウィンドウでプロジェクトを右クリックし、[プロパティ]をクリックします。左側から「ビルドイベント」タブに移動します。
ビルド後のボックスに、いくつかのコピーコマンドを入力します。例えば:
_copy "$(SolutionDir)mydll.dll" "$(TargetDir)"
_
$(SolutionDir)
と$(TargetDir)
は両方とも事前定義変数です。標準の構文は次のとおりです。
_copy "source directory and file name" "destination directory"
_
[ビルド後の編集...]ボタンをクリックすると、挿入可能なこれらの事前定義変数のリストを含むボックスが表示されます($(SolutionDir)
や$(TargetDir)
など)
サイドノートとして、これは、カスタム構成ファイル、画像、またはプロジェクトにある他の依存関係など、他のファイルをコピーするための便利なプロセスです。
次のフラグメントは私のために機能します:
<Project>
...
<ItemGroup>
<Content Include="Path\to\dll\dllname.dll">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
</ItemGroup>
...
</Project>
これはC#で機能します。ネイティブC++の場合は、dllを出力フォルダーにコピーしますが、この依存関係はVisual Studioには表示されません。プロジェクトファイルで直接編集する必要があります。
自明ではない例をテストするために、ネイティブC++プロジェクトBに依存するC#プロジェクトAを実行しようとしました。Bプロジェクトは、サードパーティのネイティブDLL Cに依存します。 Aをビルドすると、Cがバイナリフォルダーにコピーされます。
Visual Studio 2010で試しました。
Alex Yakuninが提供するこのソリューションをご覧ください http://blog.alexyakunin.com/2009/09/making-msbuild-visual-studio-to.html 本当にうまくいきました- DevExpressライブラリが明示的に使用されているシナリオには、展開時に問題を引き起こす他の依存関係がありました)
これらの2つのステップ-参照ライブラリのcopy-local = trueおよび間接参照のmsbuildターゲットの追加により、ビルドのセットアップが自動化されました。
これはお勧めしません。コピーされている(および潜在的に、再構築されている)アセンブリの数がN ^ 2爆発することになります。可能であれば、すべてのプロジェクトでアセンブリを同じ$(OutDir)に配置する必要があります。 TFSを使用している場合、チームビルドがこれを行います。
クラスライブラリリファレンスへのメインアプリケーション、referencesに移動します。
「ローカルコピー」をTrueに設定します。
これで、クラスライブラリのbinディレクトリがメインアプリケーションのbinディレクトリにコピーされます。サブ依存のサードパーティDLLを含みます。