122

.NETアプリケーションの依存関係を確認するにはどうすればよいですか?Dependency Walkerはマネージドアプリで動作しますか?最新のものをダウンロードしてアプリのプロファイリングを試みましたが、説明がほとんどなく終了します。.NETで動作しない場合、ランタイムDLLの読み込みの問題をデバッグするのに役立つ他のツールはありますか?

4

14 に答える 14

103

Dependency Walker は通常の win32 バイナリで動作します。すべての .NET dll および exe には小さなスタブ ヘッダー部分があり、通常のバイナリのように見えますが、基本的には「CLR をロードする」だけです。

.NET アプリが実際に依存しているものを確認するには、Red Gateの非常に優れた.NET リフレクターを使用できます。(編集: .NET Reflector は現在有料製品であることに注意してください。ILSpyは無料でオープン ソースであり、非常によく似ています。)

DLL をロードし、右クリックして [分析] を選択すると、必要な他のすべての DLL (およびそれらの DLL 内のメソッド) を表示する [依存先] 項目が表示されます。

ただし、アプリが X dll に依存しており、X dll が存在するにもかかわらず、何らかの理由で実行時にロードまたは配置できないという点で、より複雑になることがあります。

このような問題のトラブルシューティングを行うために、Microsoft には、実行時に何が起こっているかを表示できるAssembly Binding Log Viewerがあります。

于 2008-10-22T23:41:51.273 に答える
63

小さなユーティリティAsmSpyは、アセンブリの読み込みに関する問題を解決するための非常に貴重なツールだと思います。アセンブリ バージョンを含む、マネージド アセンブリのすべてのアセンブリ参照が一覧表示されます。

のディレクトリにあるコマンド プロンプトで.dll、次の引数を使用して実行します。

asmspy . all

asmspy の出力スクリーンショット

Chocolatey を使用してすばやくインストールします。

choco install asmspy
于 2016-04-04T13:34:14.720 に答える
26

ILDASMでアセンブリファイルを開き、MANIFESTで.assemblyexternを確認します。

于 2011-08-25T16:03:14.433 に答える
19

シェアウェア アプリやツールをダウンロードしてインストールする必要はありません。を使用して.NETからプログラムで実行できますAssembly.GetReferencedAssemblies()

Assembly.LoadFile(@"app").GetReferencedAssemblies()
于 2015-11-23T11:29:03.690 に答える
18

.NET コードの依存関係を参照するには、ツール NDepend の機能を使用できます。このツールは次のことを提案します。

たとえば、そのようなクエリは次のようになります。

from m in Methods 
let depth = m.DepthOfIsUsing("NHibernate.NHibernateUtil.Entity(Type)") 
where depth  >= 0 && m.IsUsing("System.IDisposable")
orderby depth
select new { m, depth }

その結果は次のようになります: (コード メトリックの深さに注意してください。1 は直接の呼び出し元、2 は直接の呼び出し元の呼び出し元です...) (クエリ結果をCall Graphにエクスポートするための [グラフにエクスポート] ボタンにも注意してください)

C# LINQ クエリを参照する NDepend 依存関係

依存関係グラフは次のようになります。

NDepend ディペンデンシー グラフ

依存関係マトリックスは次のようになります。

NDepend 依存関係マトリックス

依存関係マトリックスは、事実上、グラフよりも直感的ではありませんが、次のようなコードの複雑なセクションを参照するのにより適しています。

NDepend マトリックスとグラフ

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

于 2008-11-21T09:27:13.530 に答える
6

Mono ツールチェーンを使用している場合はmonodisユーティリティ--assemblyref引数とともに使用して、.NET アセンブリの依存関係を一覧表示できます。これはファイル.exe.dllファイルの両方で機能します。

使用例:

monodis --assemblyref somefile.exe

出力例 (.exe):

$ monodis --assemblyref monop.exe
AssemblyRef Table
1: Version=4.0.0.0
    Name=System
    Flags=0x00000000
    Public Key:
0x00000000: B7 7A 5C 56 19 34 E0 89
2: Version=4.0.0.0
    Name=mscorlib
    Flags=0x00000000
    Public Key:
0x00000000: B7 7A 5C 56 19 34 E0 89

出力例 (.dll):

$ monodis --assemblyref Mono.CSharp.dll
AssemblyRef Table
1: Version=4.0.0.0
    Name=mscorlib
    Flags=0x00000000
    Public Key:
0x00000000: B7 7A 5C 56 19 34 E0 89
2: Version=4.0.0.0
    Name=System.Core
    Flags=0x00000000
    Public Key:
0x00000000: B7 7A 5C 56 19 34 E0 89
3: Version=4.0.0.0
    Name=System
    Flags=0x00000000
    Public Key:
0x00000000: B7 7A 5C 56 19 34 E0 89
4: Version=4.0.0.0
    Name=System.Xml
    Flags=0x00000000
    Public Key:
0x00000000: B7 7A 5C 56 19 34 E0 89
于 2015-03-08T05:25:18.383 に答える
4

アセンブリバインディングログを有効にすると、HKLM \ Software \ Microsoft \ Fusionのレジストリ値EnableLogが1に設定されます。変更を有効にするには、アプリケーションを再起動する(iisresetを使用する)必要があることに注意してください。

ヒント:フュージョンログをオンにするとパフォーマンスが低下するため、完了したらフュージョンログをオフにすることを忘れないでください。

于 2008-10-23T00:45:22.783 に答える
4

同様の問題があり、適切なものが見つからず、古き良き Dependency Walker を認識していたので、最終的に自分で書きました。

これは特に .NET を扱い、アセンブリに含まれる (および欠落している) 参照を再帰的に表示します。また、ネイティブ ライブラリの依存関係も表示されます。

これは無料で (個人使用の場合)、興味のある方はこちらから入手できます: www.netdepends.com

www.netdepends.com

フィードバック歓迎。

于 2015-12-17T16:19:41.423 に答える
0

私が使用するもう 1 つの便利な Reflector アドインは、Dependency Structure Matrixです。どのクラスが何を使用しているかを見るのは本当に素晴らしいことです。さらに、無料です。

于 2009-05-13T13:09:48.250 に答える
-5

私が見て使っている最高のアプリ、見逃した/問題のあるdllを表示します: http://www.dependencywalker.com/

于 2015-10-12T10:28:13.957 に答える