2012-02-13 98 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

相关问题