【问题标题】:Tool to show assembly dependencies显示程序集依赖项的工具
【发布时间】:2012-03-04 23:16:14
【问题描述】:

我开始在一个新项目中工作,在一个解决方案中包含大量程序集。 我还不熟悉程序集依赖项,并且很难弄清楚哪个程序集依赖于另一个程序集。

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

任何帮助表示赞赏!

【问题讨论】:

    标签: .net assemblies


    【解决方案1】:

    这里有一些快速代码来展示 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.")?) 和/或限制搜索深度等。

    【讨论】:

    • 太棒了! (您应该将代码更新为 Cecil .9 以保存所有 Cast())。
    • 在“在稍微不那么简单的项目上运行它返回此”之后为您的图像+1。
    • @JbEvain:我落后于更新。 Cecil 多次为我服务,但我没有足够的时间来编写我的工具。感谢您的好话(@others:JbE 是 Cecil 的作者,令人敬畏的图书馆让这变得轻而易举)
    • 这看起来很酷,但由于我们公司已经在使用 NDepend,它对我来说是更快、更有效的方式,但感谢您对此的详细解释!
    • @SvenG:嗯/傻了。你已经有 NDepend?我完全不知道为什么现在问这个问题。
    【解决方案2】:

    NDepend 是依赖图分析的王者。该工具提出:

    查看此Stackoverflow answer 中有关相关问题的所有详细信息。

    【讨论】:

    • 感谢所有建议。我们已经将 NDepend 用于 Code Metrix/代码质量检查,但直到现在我还没有意识到它也可以创建代码依赖图。已经对其进行了测试,并且像魅力一样工作。这正是我需要的!!!
    猜你喜欢
    • 2011-07-30
    • 2014-04-25
    • 2011-03-16
    • 1970-01-01
    • 2012-11-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多