我们有一个c#app,它使用了许多库(我们也写过)。该应用程序依赖于不同的库,一些库依赖于其他一些库。
现在,在测试应用程序时,我们还需要确保库都正常运行。问题是该应用程序仅使用这些库的少量功能。我可以使用类似NCover的东西来查找实际使用的库类,但我也想知道这些类(跨应用程序和不同的库)是如何组织的 - 它们的依赖结构。
所以我的问题: 我希望能够运行我的应用程序,然后获取所使用的类列表,按依赖项组织(即调用/使用什么)。
是否有人知道允许您这样做的任何工具(免费或不免费)?代码全部在VS2008中,使用不同的libs / app组织为项目。
答案 0 :(得分:4)
要在NDepend上完成 Gergely 的答案,此工具可以以智能方式帮助完成此操作。 免责声明:我是该工具的开发人员之一
要实现您的要求,您需要撰写Code Query over LINQ (CQLinq)。例如,我们编写了这样的查询,一方面我们有 NDepend 程序集,它们正在调用 DevExpress 程序集。下面的CQLinq代码查询匹配NDepend使用的 DevExpress 公共类型,但也迭代地匹配使用的内部 DevExpress 类型。
let devExpressTypes = Assemblies.WithNameLike("DevExpress").ChildTypes()
let ndependTypes = Assemblies.WithNameLike("NDepend").ChildTypes()
let publicDevExpressTypesUsed = devExpressTypes.UsedByAny(ndependTypes)
let devExpressTypesUsedRec = publicDevExpressTypesUsed .FillIterative(
types=> devExpressTypes.UsedByAny(types))
from t in devExpressTypesUsedRec.DefinitionDomain
select new { t,
depth = devExpressTypesUsedRec[t],
ndependTypesUsingMe = t.TypesUsingMe.Intersect(ndependTypes)
}
然后您可以将部分结果导出到NDepend dependency graph:
(请注意以下屏幕截图中DevExpress类型的深度。深度为零表示公共DevExpress类型由NDepend类型直接调用。对于这样的DevExpress类型,直接使用它列出NDepend类型。深度为1意味着DevExpress类型由NDepend类型直接使用的类型使用,依此类推...... )
...并获取您要求的类型用法图:
答案 1 :(得分:2)
我想你会想看看:
来自Red Gate软件的。它是免费的,可能是最好的,最着名的.NET反汇编/调试工具。 它也有一个插件架构,并且有一个Codeplex页面,.NET Reflector AddIns包含许多非常有用的插件。
为了查看依赖关系,我认为Graph插件应该让你想要你想要的。
在SourceForge上还有一个非常相似(也是非常好的工具),名为Refractor,它也会显示依赖图。
答案 2 :(得分:2)
NDepend分析dll并显示一个包含类之间依赖关系的图表,它是一个很棒的(但不是免费的)代码分析工具。他们有一个试用版,你可以使用几个月,所以你可以试一试。
答案 3 :(得分:0)
您可以尝试使用Visual Studio 2010 Ultimate的RC版本来生成.NET代码的依赖关系图。您可以生成所有程序集,名称空间,类或这些组合的图形,也可以使用Architecture Explorer选择特定工件以及要显示的关系:
如何:从代码生成图形文档:http://msdn.microsoft.com/en-us/library/dd409453%28VS.100%29.aspx#SeeSpecificSource
您可以使用Visual Studio Ultimate来探索现有代码中的关系和组织 生成有向图文档。这些图表代表代码元素及其关系 作为通过链接或边连接的一组节点。您可以使用这些图表来帮助您 可视化,探索和分析代码。
如何:使用Architecture Explorer查找代码:http://msdn.microsoft.com/en-us/library/dd409431%28VS.100%29.aspx
您可以选择要使用的可视化代码的垂直部分或“切片” Architecture Explorer。您可以在Visual Studio解决方案中探索源代码 在.dll文件或.exe文件中编译托管代码。您可以使用Architecture Explorer进行浏览 通过安装其他提供商的其他域。当您找到您想要的代码时 可视化,您可以生成图表来探索该代码中的关系。
Visual Studio 2010建筑发现&建模工具论坛:http://social.msdn.microsoft.com/Forums/en-US/vsarch/threads