3

私は 3 つのプロジェクトを持つ VS2008 ソリューションを持っています: C++/CLI DLL を使用している C# ASP.NET Web サービスで、ネイティブ C++ DLL の関数を呼び出しています。すべての参照が適切に設定されています。Web サービスの bin フォルダーには、3 つすべての DLL があります。問題は、F5 キーを押すと、ブラウザーのページでFileNotFoundExceptionHRESULT 0x8007007E から、指定されたモジュールが見つかりませんでしたという通知が表示されることです。

不足しているモジュールは、私のネイティブ DLL です。ASP.NET 開発サーバーは、私の C++/CLI DLL を のどこかにコピー (および使用) します%USERPROFILE%\AppData\Local\Temp\Temporary ASP.NET Files\rootが、ネイティブのものはコピーしません。ネイティブ DLL を C++/CLI DLL と同じフォルダーに手動でコピーすると、Web サービスをデバッグできます。しかし、このコピーは正しくないようです。

ネイティブ DLL を PATH のどこかにコピーするのも、他の開発者が覚えておく必要があるため、適切ではありません。

ここに同様の質問があり、1 つの回答にリンクされているブログ投稿があります。与えられた解決策では、DLL を遅延ロードするように変更する必要があります。これは、開発のハードルのために最終製品を変更する必要があるため、中途半端な回避策のように思えます。

Web サービス、C++CLI DLL、およびネイティブ DLL の組み合わせをデバッグする適切な方法はありますか?

4

1 に答える 1

3

問題は、コンパイラがネイティブ C++ ライブラリの場所を特定できないことです。

したがって、それを修正するにはいくつかの方法があります。

  1. DLLImport を使用して、実行時に相対パスまたは絶対パスを使用して dll をロードします。
  2. path環境変数をその場所に設定します。
  3. プロジェクトの構築方法が非常に複雑になります (以下のリンクを参照してください。明らかに既に読んでいます)。

http://blogs.msdn.com/b/jorman/archive/2007/08/31/loading-c-assemblies-in-asp-net.aspx

それらを超える本当の答えはありません。

于 2013-01-14T17:49:37.343 に答える