Dot-Net

顯示程序集依賴項的工具

  • December 14, 2021

我開始在一個新項目中工作,在一個解決方案中包含大量程序集。我還不熟悉程序集依賴項,並且很難弄清楚哪個程序集依賴於另一個程序集。

您是否知道任何能夠顯示依賴項列表或更好地視覺化圖表的工具?

任何幫助表示讚賞!

NDepend是依賴圖分析的王者。該工具建議:

請參閱此Stackoverflow 答案中有關相關問題的所有詳細資訊。

下面是一些快速程式碼,展示了**Cecil 庫**執行此操作的案例:

 

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圖形文件**。在一個相當簡單的項目上執行它會導致:

在此處輸入圖像描述

在一個稍微不那麼簡單的項目上執行它會返回:

在此處輸入圖像描述

建議過濾掉某些程序集(.StartsWith("System.")?)和/或限制搜尋深度等。

引用自:https://stackoverflow.com/questions/9262464