6

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は上書きプロンプトを抑制します。

4

2 に答える 2

6

ビルド後のイベントを使用して、ディレクトリの内容(たとえば、「必須DLL」ディレクトリ)をプロジェクトの出力ディレクトリにコピーできます。

于 2009-10-05T16:37:47.887 に答える
0
  1. ダイナミックライブラリの代わりにスタティックライブラリを使用できます。これにより、dllが大きくなりますが、複数ではなく単一のdllを使用すると、時間の節約になります。
  2. ソリューション内のすべてのプロジェクトを単一のディレクトリ(管理対象および非管理対象)にルーティングします。
于 2009-10-05T16:30:26.823 に答える