win10 - 我如何確定.NET應用程序的依賴關係?




microsoft depends exe (8)

http://www.amberfish.net/

ChkAsm將一次向您顯示特定程序集的所有依賴關係,包括版本,並可輕鬆讓您搜索列表中的程序集。 比ILSpy( http://ilspy.net/ )更適合於此目的,而這正是我以前用於此任務的原因。

我如何確定.NET應用程序的依賴關係? Dependency Walker是否支持託管應用程序? 我已經下載了最新的並試用過的應用程序分析,但它只是在沒有太多解釋的情況下退出。 如果它不能與.NET一起工作,那麼是否還有其他工具可以幫助我調試運行時DLL加載問題?


你不需要下載和安裝共享軟件或工具。 您可以使用Assembly.GetReferencedAssemblies()從.NET進行編程,

Assembly.LoadFile(@"app").GetReferencedAssemblies()

啟用程序集綁定日誌記錄將HKLM \ Software \ Microsoft \ Fusion中的註冊表值EnableLog設置為1.請注意,您必須重新啟動應用程序(使用iisreset)才能使更改生效。

提示:記住在完成後關閉融合日誌記錄,因為打開它會導致性能損失。


嘗試使用選項--staticlink:"Namespace.Assembly"編譯.NET程序集。 這迫使編譯器在編譯時拉入所有的依賴關係。 如果遇到未引用的依賴項,它將通常以該程序集的名稱給出警告或錯誤消息。

Namespace.Assembly是您懷疑存在依賴關係問題的程序集。 通常靜態鏈接這個程序集會傳遞所有的依賴關係。


如果您正在使用Mono工具鏈,則可以使用帶有--assemblyref參數monodis實用程序來列出.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

我使用的另一個方便的Reflector插件是Dependency Structure Matrix 。 看到哪些類使用什麼真的很棒。 另外它是免費的。



要瀏覽.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代表直接調用者的調用者...)(同時注意“導出到圖表”按鈕將查詢結果導出到調用圖

依賴關係圖如下所示:

依賴矩陣看起來像:

依賴矩陣事實上比圖形更不直觀,但它更適合瀏覽複雜的代碼段,如:

免責聲明:我為NDepend工作





dependency-walker