web-dev-qa-db-ja.com

System.DllNotFoundException:Windows2003でDLLをロードできません

私はc#プロジェクトでc ++ dllを使用していますが、ウィンドウxpマシンで正常に実行されましたが、デバッグプロジェクトをウィンドウ2003サーバー(x64)にコピーすると、以下のエラーが表示されます。この問題は何ですか。どうすれば修正できますか。

ありがとう

"System.DllNotFoundException:ロードできませんDLL 'lib.dll':アプリケーションの構成が正しくないため、このアプリケーションを起動できませんでした。アプリケーションを再インストールすると、この問題が解決する場合があります。"

9
Rick

CRTdllの検索に問題があるとの不満があります。まず、DLLに必要なマニフェストが含まれていることを確認します。VisualStudioの[ファイル] + [開く] + [ファイル]で、DLL]を選択し、RT_MANIFESTノードが含まれていることを確認します。次の問題は、DLLのデバッグビルドを展開できないことです。これは、CRTのデバッグバージョンに依存するため、ターゲットマシンにインストールできません。

DLLのリリースビルドをデプロイするか、DLLを/ MTオプションでコンパイルして、CRTが静的にリンクされるようにします。プロジェクト+プロパティ、C/C++、コード生成、ランタイムライブラリ。DLLが/ clrオプションを指定してコンパイルされた場合、これは機能しません。

13
Hans Passant

DLL読み込みの問題については、 Dependency Walker ツールを使用することをお勧めします。正確な問題が表示されるため、このような問題に対処するときに役立つことが証明されています。 。

Visual Studio 2005をお持ちの場合は、C:\Program Files\Microsoft Visual Studio 8\Common7\Tools\Bin\depends.exeにあります。

更新:

MSVCR90D.DLLは、Visual C++ランタイム9.0のデバッグバージョンです。デバッグ目的でのみ使用してください。 DLL読み込みの問題を回避するために、ライブラリのリリースバージョンをビルドすることを強くお勧めします。ただし、デバッグバージョンを絶対にデプロイする必要がある場合は、必要なすべてのDLLがC:\Program Files\Microsoft Visual Studio 9.0\VC\redist\Debug_NonRedist\x86にあります。 。

7

ターゲットマシンにVisualC++ランタイムをインストールしていないようです。 ここ からインストールできます。これらのdllのデバッグバージョンを使用しているように見えるので、おそらく最初にリリースモードでアプリをビルドする必要がありますか? この投稿 および これ 役立つかもしれない他のいくつかの提案があります...

3
Sam Holder

Lib.dllは32ビットDLLですか? C#プログラムはx64でネイティブに実行されますが、32ビットDLLをロードできません。 C#プロジェクトのターゲットCPUを「x86」に変更して、WOW64で実行するように強制することができます。

3
wj32