System.IO.FileNotFoundException: The specified module could not be found
C++/CLI アセンブリを呼び出す C# コードを実行すると、純粋な C DLL が呼び出されます。これは、純粋な C DLL 関数を呼び出すオブジェクトがインスタンス化されるとすぐに発生します。
BackingStore は純粋な C です。CPPDemoViewModel は、BackingStore への参照を持つ BackingStore を呼び出す C++/CLI です。
CPPDemoViewModel で定義されたオブジェクトを作成するだけの新しい C# 単体テスト プロジェクトを追加します。C# プロジェクトから CPPDemoViewModel への参照を追加しました。
C++/CLI テスト プロジェクトは、CPPDemoViewModel に ref を追加するだけで問題なく動作するため、言語間を行き来することになります。
.Net 3.5 SP1 で Visual Studio 2008 SP1 を使用しています。Vista x64 でビルドしていますが、プラットフォーム ターゲットが x86 に設定されていることを確認するように注意しています。
これは私が見逃している愚かで明白な何かのように感じますが、私的に解決しようとして時間を無駄にするのはもっと愚かなので、恥ずかしい思いをしてここにいます!
これは、C++/CLI で実装された ViewModel を使用して DLL に保持している膨大な量のレガシー C コードを移植するプロジェクトのテストです。
edit ディレクトリを確認したところ、BackingStore.dll がコピーされていないことが確認できました。
典型的なマルチプロジェクト ソリューションで作成された標準の一意のプロジェクト フォルダーがあります。
WPFViewModelInCPP バッキングストア CPPViewModel CPPViewModelTestInCS 置き場 デバッグ デバッグ
驚いたことに、上位レベルの Debug は、C および C++/CLI プロジェクトで使用される共通のフォルダーのようです。
WPFViewModelInCPP\Debug には、BackingStore.dll、CPPDemoViewModel.dll、CPPViewModelTest.dll、およびそれらに関連付けられた .ilk および .pdb ファイルが含まれています。
WPFViewModelInCPP\CPPViewModelTestInCS\bin\Debug には CPPDemoViewModel と CPPViewModelTestInCS の .dll と .pdb ファイルが含まれていますが、BackingStore は含まれていません。ただし、BackingStore をそのディレクトリに手動でコピーしても、エラーは修正されませんでした。
CPPDemoViewModel にはプロパティCopy Localセットがあり、参照された場合にその DLL をコピーする責任があると思います。C# プロジェクトからピュア C DLLへの参照を追加できません。「バッキング ストアへの参照を追加できませんでした」と表示されるだけです。
問題が 1 つだけなのか 2 つなのかわかりません。
古い形式のコピー ビルド ステップを使用して、BackingStore.dll を特定の C# プロジェクトのディレクトリにコピーできますが、新しい .net モデルではそれが必要ないことを願っていました。
DependencyWalker は、欠落しているファイルが GPSVC.dll であり、セキュリティ設定の問題を示していると示唆しています。これはニシンだと思います。
edit2 BackingStore.dll の手動コピーを実行可能ファイルに隣接させることで、GUI が正常に動作するようになりました。C# テスト プロジェクトには、テスト プロジェクトの実行環境が原因であると思われる問題がまだ残っていますが、今のところ、それがなくても問題ありません。