私は3つのプロジェクトを持つVS2010ソリューションを持っています:
- ネイティブ (C++) DLL
- ネイティブ DLL を使用するマネージ (C#) DLL
- マネージド DLL を使用するマネージド (C#) コンソール アプリ
マネージ DLL をコンソール アプリへの参照として設定できますが、ネイティブ DLL をそのような参照として設定することはできません。
クラッシュせずに VS2010 内からコンソール アプリを実行するには、ネイティブ DLL を .exe フォルダーにコピーする必要があります。
2 つの質問があります。
- 手動でコピーする必要がないように、ネイティブ DLL を DLL 検索パスに追加するにはどうすればよいですか?
- 各構成 (デバッグ/リリース) が正しい DLL バージョンを取得するようにするにはどうすればよいですか?
より詳細な解決策- Tilak の回答による:以下は、 Tilak の回答
に基づく初心者向けの詳細です。
- マネージド コンソール プロジェクトにネイティブ DLL をファイルとして追加します (既存のファイルを追加...)。
- プロジェクトのプロパティ ペインで、[ビルド アクション] を [コンテンツ] に、[出力ディレクトリにコピー] を [新しい場合はコピー] または [常にコピー] に設定します。
- ソリューションまたは VS2010 を閉じます。
- マネージド プロジェクト
.csproj
ファイルをテキスト エディターで開き、<ItemGroup>
ネイティブ DLL 名を含むファイルを見つけます (これは、手順 1 でファイルを追加したときに作成されたものです)。そこにいくつかの小さな変更を加えます。- デバッグ ビルドの場合は、デバッグDLLへのパスを
<ItemGroup>
使用して入力する代わりに。<ItemGroup Condition="'$(DefineConstants)' == 'DEBUG;TRACE' ">
- リリース ビルドのエントリを複製し、
<ItemGroup>
使用する代わりにリリースDLL<ItemGroup Condition="'$(DefineConstants)' != 'DEBUG;TRACE' ">
へのパスを入力します。
- デバッグ ビルドの場合は、デバッグDLLへのパスを
- ファイルを保存し、VS2010 を再度開きます。依存関係が適切に配置されているはずです。