2011-09-12 29 views
2

私のアプリケーションがDLLに存在する関数を使用しようとするたびに、実行可能ファイルと同じフォルダにある.dllのSystem.DllNotFoundExceptionが表示されます。奇妙なことは、それが一人のユーザのPC上でしか起こらないということです。それは私のdevのPC上で正常に動作し、それは私がそれを試した1つの非devのPC上で正常に動作します。また、であり、正しく使用されている他のDLLがフォルダにあります。問題のDLLは、ネイティブライブラリ用のC#ラッパーである別のDLLを介してアプリケーションから参照されるネイティブライブラリです。現在のフォルダにある.dllのDllNotFoundException

私の最初の本能は、問題のPCには存在しないこのDLLによって参照されている他のライブラリがなければならないということですが、このPCが他の非開発PCにないライブラリを想像できません。

私の質問はこれです:特定のDLLファイルの依存関係を判断する方法はありますか?問題のDLLはネイティブライブラリ(つまりマネージコードではない)で、ソースコードにアクセスできません。そして、それが何の依存関係も見当たらない場合、他に何がこのような問題を引き起こすか?

+1

ロードしようとしているこのネイティブライブラリは、ホスティングプロセス(x64など)とは異なるCPUアーキテクチャ(x86など)に対してコンパイルされますか? –

+0

@Darin Dimitrov:通常はBadImageFormatExceptionになります。 – dtb

+0

@dtb、それは本当です、それは心に来たちょうど最初のものでした。 –

答えて

4

管理対象外のDLLの場合は、Dependency Walkerを使用して依存関係を見つけることができます。

+0

ありがとう、私はDependency Walkerミラーを見つけました。このライブラリの依存として、MSVCP100.DLL、MSVCR100.DLL、およびKERNEL32.DLLのみが一覧表示されます。私が知る限り、これらのDLLはc:\ Windows \ System32ディレクトリにあるはずです。問題のあるPCにこれらのDLLがあることを確認します。 – jjoelson

+1

私はMSVCRはVisual C++ランタイムで、AFAIKはWindowsには含まれていないと思います。少なくとも古いバージョンのウィンドウでは、新しいバージョンのものです。多くのプログラムがインストールされているため、常に存在するとは限りません。 MSVCPについての考えはありませんが、状況は類似していると思います。 – CodesInChaos

+0

それはそれが原因であるかもしれないように聞こえる。私はユーザーがその日のために離れるまで問題のPCをチェックすることはできませんが、これが問題であれば、その2つのDLLをコピーするだけでは十分ではないと思います。私が間違っている場合は私を修正しますが、おそらくこのようなものをインストールする必要があります:http://www.microsoft.com/download/en/details.aspx?id=14632 – jjoelson

0

ILSpyを使用してdllを開いて、その依存関係を最初に表示することをお勧めします。

関連する問題