樹(shù)視圖--tree:3分鐘讀懂多層程序集引用關(guān)系)
AsmSpy依賴(lài)樹(shù)視圖--tree3分鐘讀懂多層程序集引用關(guān)系【免費(fèi)下載鏈接】AsmSpySimple command line assembly reference checker項(xiàng)目地址: https://gitcode.com/gh_mirrors/as/AsmSpy你是否遇到過(guò)這樣的場(chǎng)景程序運(yùn)行時(shí)報(bào)找不到某個(gè)DLL或程序集版本沖突打開(kāi)bin目錄一看幾十上百個(gè)DLL密密麻麻根本分不清誰(shuí)引用了誰(shuí)AsmSpy依賴(lài)樹(shù)視圖正是為解決這個(gè)問(wèn)題而生——AsmSpy是一款輕量的命令行程序集引用檢查工具而它的--tree參數(shù)能像家譜一樣把多層程序集引用關(guān)系以樹(shù)狀圖直觀地展示在控制臺(tái)里。本文將用3分鐘帶你掌握這個(gè)實(shí)用技能。上圖展示了AsmSpy的典型應(yīng)用場(chǎng)景當(dāng)多個(gè)DLL引用了不同版本的同一程序集如Newtonsoft.Json時(shí)樹(shù)視圖能幫你快速定位沖突源頭再配合配置文件完成綁定重定向。AsmSpy依賴(lài)樹(shù)視圖是什么為什么值得用默認(rèn)情況下AsmSpy輸出的是引用沖突列表告訴你有多少程序集引用了不同版本的同名DLL。而**AsmSpy依賴(lài)樹(shù)視圖tree命令**則更進(jìn)一步它以某個(gè)程序集為根節(jié)點(diǎn)遞歸展開(kāi)每一層引用形成一棵完整的依賴(lài)樹(shù)。它的價(jià)值在于看清全貌一次掌握整個(gè)項(xiàng)目的多層引用關(guān)系而不是零散的信息定位問(wèn)題快速找到缺失的程序集紅色和版本沖突點(diǎn)輔助重構(gòu)分析哪些程序集是根、哪些是葉子為模塊拆分提供依據(jù)3分鐘上手AsmSpy tree命令用法第一步安裝AsmSpy如果你還沒(méi)有安裝可以通過(guò)Chocolatey一鍵搞定choco install asmspy安裝完成后命令行直接輸入AsmSpy即可調(diào)用。第二步運(yùn)行基礎(chǔ)tree命令切換到程序集的bin目錄執(zhí)行AsmSpy D:\MyProject\bin --tree輸出結(jié)果是一棵典型的樹(shù)狀結(jié)構(gòu)使用├──、└──、│等字符繪制層級(jí)關(guān)系每個(gè)節(jié)點(diǎn)顯示程序集名稱(chēng)和版本號(hào)例如└──[LEVEL 0] MyApp.dll 1.0.0.0 ├──[LEVEL 1] Newtonsoft.Json 9.0.0.0 ├──[LEVEL 1] Common.Logging 3.4.1.0 │ └──[LEVEL 2] log4net 2.0.8.0 └──[LEVEL 1] MyLibrary.dll 2.0.0.0 └──[LEVEL 2] Newtonsoft.Json 6.0.0.0一眼就能看出MyApp和MyLibrary都依賴(lài)Newtonsoft.Json但版本不同——沖突點(diǎn)就在這里第三步只分析單個(gè)程序集如果只想看某個(gè)DLL的依賴(lài)關(guān)系直接把文件路徑傳給AsmSpy即可AsmSpy D:\MyProject\bin\MyApp.dll --tree此時(shí)該DLL會(huì)成為樹(shù)的唯一根節(jié)點(diǎn)適合聚焦排查。提升效率的核心參數(shù)treedepth與treelabelAsmSpy依賴(lài)樹(shù)視圖之所以好用還因?yàn)樗峁┝藘蓚€(gè)針對(duì)性的調(diào)優(yōu)參數(shù)相關(guān)實(shí)現(xiàn)位于 ConsoleTreeVisualizer.cs。用 --treedepth 限制樹(shù)深度依賴(lài)層級(jí)很深時(shí)整棵樹(shù)會(huì)非常長(zhǎng)。用--treedepth簡(jiǎn)寫(xiě)-trd限定展開(kāi)層數(shù)只看前幾層AsmSpy D:\MyProject\bin --tree --treedepth 2用 --treelabel 顯示層級(jí)標(biāo)簽加上--treelabel簡(jiǎn)寫(xiě)-trl后每個(gè)節(jié)點(diǎn)都會(huì)標(biāo)注[LEVEL n]層級(jí)一目了然AsmSpy D:\MyProject\bin --tree --treelabel如果還想過(guò)濾無(wú)關(guān)內(nèi)容可以組合其他開(kāi)關(guān)--nonsystem忽略系統(tǒng)程序集、--exclude xxx排除指定名稱(chēng)的程序集讓依賴(lài)樹(shù)視圖更聚焦于你自己的代碼。讀懂樹(shù)上的顏色綠、黃、紅各代表什么樹(shù)視圖中節(jié)點(diǎn)顏色對(duì)應(yīng)程序集的來(lái)源狀態(tài)定義見(jiàn) AssemblySource.cs綠色程序集在本地目錄中找到狀態(tài)正常黃色本地沒(méi)找到但在全局程序集緩存GAC中找到了紅色程序集完全缺失這是最需要警惕的信號(hào)紫色來(lái)源未知需要進(jìn)一步確認(rèn)從依賴(lài)樹(shù)到解決方案版本沖突怎么辦發(fā)現(xiàn)沖突后最常規(guī)的解決方式是綁定重定向binding redirect在App.config或Web.config中添加assemblyBinding節(jié)點(diǎn)把舊版本請(qǐng)求統(tǒng)一指向新版本。完整的分析、生成流程可參考文章開(kāi)頭的流程圖相關(guān)邏輯在 BindingRedirectExport.cs 中實(shí)現(xiàn)??偨Y(jié)AsmSpy依賴(lài)樹(shù)視圖--tree是排查程序集引用關(guān)系的利器一條命令生成依賴(lài)樹(shù)三分鐘看清多層引用結(jié)構(gòu)配合--treedepth控制深度、--treelabel標(biāo)注層級(jí)、顏色識(shí)別缺失與沖突你就能快速定位并解決DLL版本問(wèn)題。下次再遇到程序集加載失敗不妨先跑一次 AsmSpy 依賴(lài)樹(shù)視圖吧【免費(fèi)下載鏈接】AsmSpySimple command line assembly reference checker項(xiàng)目地址: https://gitcode.com/gh_mirrors/as/AsmSpy創(chuàng)作聲明:本文部分內(nèi)容由AI輔助生成(AIGC),僅供參考