7つのネイティブC++DLLを必要とするマネージC++プロジェクトを参照するC#GUIアプリケーションがあります。これらの7つのDLLを最終的なプロジェクト出力にコピーするための最もクリーンな方法を探しています。
機能するもの
すべてのDLLをC#アプリケーションに追加し、次のように指定します。
ビルドアクション=="コンテンツ"
出力ディレクトリにコピー==常にコピー"
これにより、プロジェクトのベースフォルダがDLLの混乱になる場合があります。これらはすべて、参照されるプロジェクトの要件であり、そのプロジェクト自体ではありません。
動作しないもの
- 上記の設定で「必須DLL」という名前のフォルダにこれらのDLLを追加します。出力内の同じ名前のフォルダーにコピーされるため、誤った場所に配置されます。出力ディレクトリを指定する方法がわかりません。
- 埋め込みリソース:C#P / Invokeでは、参照しているDLLを埋め込みリソースとして追加できます。DLLは最終的なライブラリ内に埋め込まれます。Managed C ++ではこの可能性は見られず、参照チェーンで機能するかどうかさえわかりません。
- ManagedC++プロジェクト内のコンテンツとしてDLLを追加します。ファイルは出力ディレクトリにコピーされません。
この場合の最良の解決策は何ですか?可能であれば、マネージC ++プロジェクトが独自のDLL要件を処理できるようにし、できればプロジェクトが複数のアプリケーションで使用されるのを妨げない方法で処理できるようにしたいと思います。
クリーンなプロジェクトを作成する限り、プロジェクトのサブフォルダー内にすべてのコードファイルを挿入し、ルートにDLLを配置して、最初のソリューションを機能させる方がよいでしょうか。
解決策:
Josephからのビルド後の提案を使用して、次のコマンドは「必須DLL」フォルダーを使用するためのトリックを実行します。
xcopy "$(ProjectDir)Required DLLs*。*""$(TargetDir)" / Q / Y
/ Qは個々のファイルを出力から非表示にし、/Yは上書きプロンプトを抑制します。