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

发布于 2025-01-05 16:56:01 字数 129 浏览 5 评论 0原文

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

您知道有哪些工具能够显示依赖项列表或更好的可视化图表吗?

任何帮助表示赞赏!

I begun work in a new project with lots of assemblies in a single solution.
I am not familiar yet with the assembly dependencies and having a hard time figuring out which assembly depends on another.

Do you know any tools that are capable to show a dependency list or better a visual graph of it?

Any help appreciated !

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

苦妄 2025-01-12 16:56:01

下面是一些快速代码,用于展示 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图形文件。在一个相当简单的项目上运行它会导致:

在此处输入图像描述

在一个不太简单的项目上运行它会返回以下结果:

< img src="https://i.sstatic.net/9OQF3.jpg" alt="在此处输入图像描述">

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

Here is some quick code to show case the Cecil Library to do this:

 

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("}");
}

It generates a dot graph file. Running this on a fairly simple project results in:

enter image description here

Running it on a slightly less simple project returned this:

enter image description here

It may be advisable to filter out certain assemblies (.StartsWith("System.")?) and / or limit search depth etc.

染火枫林 2025-01-12 16:56:01

NDepend 是依赖图分析方面的王者。 NDepend 是一个商业工具,它提出:

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

NDepend is the king when it comes to dependency graph analysis. NDepend is a commercial tool that proposes:

See all details in this Stackoverflow answer concerning a related question.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文