我开始在一个新项目中工作,在一个解决方案中有大量组件。 我还不熟悉程序集依赖关系,很难搞清楚哪个程序集依赖于另一个程序集。显示组件依赖关系的工具
你知道任何能够显示依赖列表或更好的可视化图表的工具吗?
任何帮助表示赞赏!
我开始在一个新项目中工作,在一个解决方案中有大量组件。 我还不熟悉程序集依赖关系,很难搞清楚哪个程序集依赖于另一个程序集。显示组件依赖关系的工具
你知道任何能够显示依赖列表或更好的可视化图表的工具吗?
任何帮助表示赞赏!
NDepend是涉及依赖图分析的国王。该工具提出:
查看此Stackoverflow answer有关相关问题的所有详情。
下面是一些简单的代码来显示的情况下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.")
?)和/或限制搜索深度等。
感谢您的所有建议。我们已经将NDepend用于Code Metrix /代码质量检查,但直到现在我还没有意识到它也可以创建代码依赖关系图。 已经测试过,像魅力一样工作。正是我需要的! – SvenG 2012-02-13 16:27:50