我开始参与一个包含许多程序集的新项目,它们都在同一个解决方案中。 我还不熟悉程序集之间的依赖关系,很难弄清楚哪个程序集依赖于另一个程序集。
您是否知道有哪些工具可以显示程序集之间的依赖关系列表或更好的可视化图形呢?
非常感谢任何帮助!
我开始参与一个包含许多程序集的新项目,它们都在同一个解决方案中。 我还不熟悉程序集之间的依赖关系,很难弄清楚哪个程序集依赖于另一个程序集。
您是否知道有哪些工具可以显示程序集之间的依赖关系列表或更好的可视化图形呢?
非常感谢任何帮助!
这是一个快速的代码示例,展示如何使用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图形文件。在一个相当简单的项目上运行它会产生以下结果:


建议过滤掉某些程序集(例如.StartsWith("System."))并/或限制搜索深度等。
NDepend在依赖关系图分析方面是王者。NDepend是一款商业工具,提供:
有关相关问题的详细信息,请参见此Stackoverflow答案。