显示程序集依赖关系的工具

Sve*_*enG 8 .net assemblies

我开始在一个新项目中工作,在一个解决方案中有许多组件.我还不熟悉程序集依赖性,并且很难确定哪个程序集依赖于另一个程序集.

您是否知道任何能够显示依赖关系列表或更好的可视化图表的工具?

任何帮助赞赏!

seh*_*ehe 15

这是一些快速代码,用于显示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("}");
}
Run Code Online (Sandbox Code Playgroud)

它生成一个dot图形文件.在一个相当简单的项目上运行它会导致:

在此输入图像描述

在一个稍微不那么简单的项目上运行它返回了:

在此输入图像描述

建议过滤掉某些组件(.StartsWith("System.")?)和/或限制搜索深度等.


Ste*_*ven 5

在依赖图分析方面,NDepend是最重要的。该工具建议:

请参阅此Stackoverflow答案中有关相关问题的所有详细信息。