こんにちは、いくつかの小さなプロジェクトで構成されるプロジェクト ソリューションがあります。これらのプロジェクトは、次のように他のプロジェクトに依存しています。
(1) デバイス制御機能を備えたネイティブ アンマネージド C++ dll
使用者は…</p>
(2) ネイティブ関数を .Net にラップする C# プロジェクト
使用者は…</p>
(3) フレームワークによって定義されたより一般的な抽象化レイヤーへの特殊なデバイスへのアダプターのラッピング
使用者は…</p>
(4) 簡単な実装例では、抽象化フレームワークを介してこのネイティブ デバイス インターフェイスを使用しようとします。
ここでの問題: ネイティブ dll (1) が .Net ラッパー プロジェクト (2) に「既存のアイテム」として追加され、「ビルド イベント = コンテンツ」および「出力へのコピー… = 常に」が「Hans Passant」として設定されます。この問題解決。ネイティブ dll は、DllImportAttribute を介してこのラッパーで使用されます。そして、これはこのプロジェクトではうまくいきます。dll は出力ディレクトリにコピーされ、ラッパーによって検出されます。
ラッパー (2) は、アダプター ラッパー プロジェクト (3) からの「参照」として使用されます。また、ネイティブ dll (1) が出力ディレクトリにコピーされ、.Net ラッパー (2) によって検出および使用されます。しかし…</p>
.. アダプター ラッパー プロジェクト (3) を単純なサンプル プロジェクト (4) に「参照」として追加すると、ネイティブ dll (1) はこのサンプル プロジェクト (4) の出力ディレクトリにコピーされません。したがって、dll は .Net ラッパー (2) によって検出されず、System.DllNotFoundException が発生します。
私の質問は次のとおりです。アダプタ ラッパー プロジェクト (3) を別のプロジェクトに追加すると、必要なすべての dll が出力ディレクトリ (ネイティブ dll (1) を含む) にあるということです。参照しているプロジェクトの出力ディレクトリにコピーされましたか? そして、これは、Marc Gravellが言っているように、実装例にリソースとしてネイティブ dll を追加しません。
どうもありがとう、J