0

サードパーティの.netライブラリを使用しています。このライブラリは、

Kernel.LoadLibrary(DllFileName)

このコードをac#コンソールアプリケーションで実行するとすべて正常に動作しますが、Webアプリ(MVCアプリ)からライブラリを使用しようとすると、「メモリ位置への無効なアクセス」例外が発生します。WebアプリからマネージDLLをロードするために、いくつかの設定を変更する必要がありますか?

他に詳細が必要な場合はお知らせください

4

1 に答える 1

0

ビット数の問題かもしれません。Kernel.LoadLibrary はおそらく、アンマネージLoadLibrary呼び出しに対する PInvoke 呼び出しであり、アンマネージ ライブラリをロードするために使用される可能性があります。プロセスが 32 ビットか 64 ビットかをチェックせず、管理されていないライブラリの適切なバージョンをロードしない場合、問題が発生します (実際には、無効な形式に関するエラーが表示されると思っていましたが、異なるメッセージは、他のいくつかの保護をスキップしているためである可能性があります)。32 ビット モードを強制してみて、それが役立つ (またはエラーが変わる) かどうかを確認してください: IIS 6またはIIS 7

エラー メッセージは、「ファイルが見つかりません」という問題に対して私が期待するものと一致していないように見えますが、コンソール アプリケーションと Web アプリケーションのもう 1 つの違いは、現在のディレクトリが異なることです (サードパーティの場合)。ライブラリは LoadLIBrary にフル パスを渡しません) - 通常、コンソール アプリを実行するときはアプリケーションのディレクトリですが、通常は Web アプリの Windows システム ディレクトリとして開始されます。ロードしている DLL が現在のディレクトリにあると想定している場合、これは問題になる可能性があります。間違ったファイルをロードしていると思われる場合、Process Monitorは非常に便利なツールです。プロセスが実行しているすべてのアクティビティ (ロードしようとしているファイルなど) を確認できます。

于 2012-07-08T03:54:37.210 に答える