web-dev-qa-db-ja.com

DLL依存関係を確認する方法は?

時々私が小さなプロジェクトをしているとき、私は十分に注意を払わず、知らないDLLの依存関係を誤って追加します。このプログラムを友人や他の人に出荷すると、「一部のDLL」が見つからないため「機能しません」。これは、プログラムがシステム上でDLLを見つけることができますが、システムでは見つけることができないためです。

これらのoops状況を防ぐために、DLL依存関係の実行可能ファイルをスキャンするか、テストのために「クリーンな」DLLフリー環境でプログラムを実行する方法はありますか?

133
orlp

依存関係ウォーカーを試してください: http://www.dependencywalker.com/

81
Luchian Grigore

Visual Studioツール(VC\binフォルダー)のdumpbinがここで役立ちます。

dumpbin /dependents your_dll_file.dll
168
JeffRSon

Linuxファンには興味深いソリューションをお勧めします。このソリューションを検討した後、DependencyWalkerからこれに切り替えました。

Windows関連のlddexeでお気に入りの dll を使用できます。

これを行うには、Windowsに Cygwin (追加パッケージを必要としない基本インストール)をインストールし、Cygwin Terminalを起動するだけです。これで、次のようなお気に入りのLinuxコマンドを実行できます。

$ ldd your_dll_file.dll

UPD:lddは、 Windowsのgit bash端末 でも使用できます。 gitが既にインストールされている場合に備えて、cygwinをインストールする必要はありません。

36
troyane
  1. スタートボタンを押して、「dev」と入力します。 「Developer Command Prompt for VS 2017」というプログラムを起動します

  2. 操作しようとしているアセンブリへの完全なファイルパスを把握する

  3. 開いたウィンドウで、「dumpbin /dependents [path]」と入力します。ここで、[path]はステップ2で計算したパスです

  4. エンターキーを押す

バム、あなたはあなたの依存情報を持っています。ウィンドウは次のようになります。

enter image description here

10
Iamsodarncool
  1. 「Depends」というプログラムがあります
  2. Cygwinがインストールされている場合、ldd file.exeほど単純なものはありません
9
Artyom

最も安全なのは、プログラムをテストできるクリーンな仮想マシンがあることです。テストするすべてのバージョンで、VMを初期のクリーンな値に復元します。次に、セットアップを使用してプログラムをインストールし、機能するかどうかを確認します。

DLLの問題にはさまざまな面があります。 Visual Studioを使用してCRTに動的にリンクする場合、CRT DLLを配布する必要があります。 VSを更新すると、CRTの別のバージョンを配布する必要があります。依存関係をチェックするだけでは十分ではありません。クリーンなマシンでフルインストールを実行することが唯一の安全なソリューションであるIMOです。

本格的なテスト環境をセットアップせずにWindows 7を使用する場合は、XP-Modeを初期クリーンマシンとして使用し、 XP-More を使用してVMを複製できます。

8
eran

開発マシンで、プログラムを実行して Sysinternals Process Explorer を実行できます。下のペインに、ロードされたDLLとそれらへの現在のパスが表示されますが、これはいくつかの理由で便利です。展開パッケージを実行している場合、どのDLLが間違ったパスで参照されているかが明らかになります(つまり、正しくパッケージ化されていません)。

現在、当社はVisual Studio Installerプロジェクトを使用して、依存関係ツリーをたどり、ルーズファイルとしてプログラムを出力しています。 VS2013では、これは拡張機能になりました: https://visualstudiogallery.msdn.Microsoft.com/9abe329c-9bba-44a1-be59-0fbf6151054d 。その後、これらの緩やかなファイルをより包括的なインストーラーにパッケージ化しますが、少なくともそのセットアッププロジェクトはすべてのドットネット依存関係を1つの場所にドロップし、不足している場合は警告します。

6
Shiv

過去(つまりWinXPの日々)、DLL Dependency Walker(depends.exe)に依存/依存していましたが、DLLを特定できない場合があります問題。理想的には、実行前に検査で調べたいのですが、それで解決しない場合(または時間がかかりすぎる場合)は、 http:// blogs。 msdn.com/b/junfeng/archive/2006/11/20/debugging-loadlibrary-failures.aspx および https://msdn.Microsoft.com/en-us/library/windows/hardware /ff556886(v=vs.85).aspx と簡単に言及しました LoadLibraryが失敗しました; GetLastErrorヘルプなし

警告:過去にWindowsを台無しにして、gflagをひざまづかせてクロールしました。

enter image description here

注:「ローダースナップ」はプロセスごとであるため、UIの有効化はチェックされたままになりません(cdbまたはglfags -iを使用)

2
HidekiAI

グーグルで「depends.exe」を検索してください。これを処理する小さなユーティリティです。

1
shiying yu

NDependはJesseによって既に言及されています(.NETコードを分析する場合)が、それがどのように役立つかを正確に説明しましょう。

DLL依存関係の実行可能ファイルをスキャンしたり、これらのoops状況を防ぐためのテストのために「クリーンな」DLLフリー環境でプログラムを実行できるプログラム/スクリプトはありますか?

[NDependプロジェクトプロパティ]パネルでは、分析するアプリケーションアセンブリ(緑色)とNDependはアプリケーションによって使用されるサードパーティアセンブリを推測します(青色)を定義できます。アプリケーションおよびサードパーティのアセンブリを検索するディレクトリのリストが提供されます。

NDepend Project Properties Application and Third-Party assemblies

これらのディレクトリにサードパーティのアセンブリが見つからない場合、エラーモードになります。たとえば、.NET FxディレクトリC:\WINDOWS\Microsoft.NET\Framework\v4.0.30319を削除すると、.NET Fxサードパーティアセンブリが解決されないことがわかります。

NDepend Project Properties Application and Third-Party assemblies not resolved

免責事項:私はNDependで働いています

ソースコードがある場合は、ndependを使用できます。

http://www.ndepend.com/

それは高価であり、依存関係を分析する以上のことを行うため、探しているものをやり過ぎかもしれません。

1
Jesse

JetBrains dotPeek を試してください。それは無料です。

0
tedebus

以下のリンクからMicrosoftのSysInternalツールキットを参照してください https://docs.Microsoft.com/en-us/sysinternals/downloads/process-Explorer

ダウンロードフォルダに移動し、管理者権限で「Procexp64.exe」を開きます。 [検索]メニュー-> [ハンドルまたはDLLの検索]オプションまたはCtrl + Fショートカットを開きます。

enter image description here