我開始在一個新項目中工作,在一個解決方案中有大量組件。 我還不熟悉程序集依賴關係,很難搞清楚哪個程序集依賴於另一個程序集。顯示組件依賴關係的工具
你知道任何能夠顯示依賴列表或更好的可視化圖表的工具嗎?
任何幫助表示讚賞!
我開始在一個新項目中工作,在一個解決方案中有大量組件。 我還不熟悉程序集依賴關係,很難搞清楚哪個程序集依賴於另一個程序集。顯示組件依賴關係的工具
你知道任何能夠顯示依賴列表或更好的可視化圖表的工具嗎?
任何幫助表示讚賞!
NDepend是涉及依賴圖分析的國王。該工具提出:
查看此Stackoverflow answer有關相關問題的所有詳情。
下面是一些簡單的代碼來顯示的情況下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。在一個相當簡單的項目結果運行此:
運行它在一個稍微不那麼簡單的項目,返回此:
也許應該過濾掉某些組件(.StartsWith("System.")
?)和/或限制搜索深度等。
感謝您的所有建議。我們已經將NDepend用於Code Metrix /代碼質量檢查,但直到現在我還沒有意識到它也可以創建代碼依賴關係圖。 已經測試過,像魅力一樣工作。正是我需要的! – SvenG 2012-02-13 16:27:50