2012-02-13 106 views
8

我開始在一個新項目中工作,在一個解決方案中有大量組件。 我還不熟悉程序集依賴關係,很難搞清楚哪個程序集依賴於另一個程序集。顯示組件依賴關係的工具

你知道任何能夠顯示依賴列表或更好的可視化圖表的工具嗎?

任何幫助表示讚賞!

回答

4

NDepend是涉及依賴圖分析的國王。該工具提出:

查看此Stackoverflow answer有關相關問題的所有詳情。

+1

感謝您的所有建議。我們已經將NDepend用於Code Metrix /代碼質量檢查,但直到現在我還沒有意識到它也可以創建代碼依賴關係圖。 已經測試過,像魅力一樣工作。正是我需要的! – SvenG 2012-02-13 16:27:50

12

下面是一些簡單的代碼來顯示的情況下Cecil Library做到這一點:

 

public static void PoC(IEnumerable<AssemblyDefinition> assemblies, TextWriter writer) 
{ 
    Console.WriteLine("digraph Dependencies {"); 
    var loaded = assemblies 
     .SelectMany(a => a.Modules.Cast<ModuleDefinition>()) 
     .SelectMany(m => m.AssemblyReferences.Cast<AssemblyNameReference>().Select(a => a.Name + ".dll")) 
     .Distinct() 
     .Select(dllname => { 
       try { return AssemblyFactory.GetAssembly(dllname); } 
       catch { return null; } }) 
     .Where(assembly => assembly != null) 
     .ToList(); 

    loaded.ForEach(a => a.MainModule.FullLoad()); 

    loaded.ForEach(a => 
     { 
      foreach (var r in a.MainModule.AssemblyReferences.Cast<AssemblyNameReference>()) 
       Console.WriteLine(@"""{0}"" -> ""{1}"";", r.Name, a.Name.Name); 
     }); 

    Console.WriteLine("}"); 
} 

它會產生一個dot graph file。在一個相當簡單的項目結果運行此:

enter image description here

運行它在一個稍微不那麼簡單的項目,返回此:

enter image description here

也許應該過濾掉某些組件(.StartsWith("System.") ?)和/或限制搜索深度等。

+0

真棒! (您應該將代碼更新到Cecil .9以保存所有Cast <>())。 – 2012-02-13 15:43:30

+0

對於您的圖像+1後「運行它稍微不簡單的項目返回此」。 – Steven 2012-02-13 15:44:03

+0

@JeBEvain:我在更新後面。塞西爾爲我提供了很多次,但我沒有足夠的時間來寫我的工具。感謝這些客氣話(@others:JbE是Cecil的作者,令人敬畏的圖書館變得輕而易舉) – sehe 2012-02-13 15:45:33