如何从我的.NET解决方案构建“依赖关系树图”

时间:2008-09-17 05:26:53

标签: .net reflection dependencies

我可以轻松查看单个项目在Visual Studio .NET项目中引用的项目和dll。

是否有任何应用程序或反射可以构建一个完整的依赖树,我可以使用它来绘制依赖图形图表?

5 个答案:

答案 0 :(得分:10)

NDepend附带了一个与依赖矩阵相结合的交互式依赖图。你可以{Nntpend download and use the free trial edition一段时间。

More on NDepend Dependency Graph enter image description here

More on NDepend Dependency Matrixenter image description here

免责声明:我是工具团队的一员

答案 1 :(得分:5)

我需要类似的东西,但不想支付(或安装)工具来执行此操作。我created a quick PowerShell script that goes through the project references并以yuml.me友好格式将其吐出:

Function Get-ProjectReferences ($rootFolder)
{
    $projectFiles = Get-ChildItem $rootFolder -Filter *.csproj -Recurse
    $ns = @{ defaultNamespace = "http://schemas.microsoft.com/developer/msbuild/2003" }

    $projectFiles | ForEach-Object {
        $projectFile = $_ | Select-Object -ExpandProperty FullName
        $projectName = $_ | Select-Object -ExpandProperty BaseName
        $projectXml = [xml](Get-Content $projectFile)

        $projectReferences = $projectXml | Select-Xml '//defaultNamespace:ProjectReference/defaultNamespace:Name' -Namespace $ns | Select-Object -ExpandProperty Node | Select-Object -ExpandProperty "#text"

        $projectReferences | ForEach-Object {
            "[" + $projectName + "] -> [" + $_ + "]"
        }
    }
}

Get-ProjectReferences "C:\Users\DanTup\Documents\MyProject" | Out-File "C:\Users\DanTup\Documents\MyProject\References.txt"

Sample Graph

答案 2 :(得分:3)

除了NDepend之外,您还可以尝试使用此Reflector的插件来显示程序集依赖关系图。

答案 3 :(得分:2)

您可以使用Architecture Explorer浏览解决方案,选择项目以及要显示的关系,然后根据您的选择创建依赖关系图,从而在Visual Studio 2010 Ultimate中创建项目和程序集的依赖关系图。

有关详细信息,请参阅以下主题:

如何:从代码生成图形文档http://msdn.microsoft.com/en-us/library/dd409453%28VS.100%29.aspx#SeeSpecificSource

如何:使用Architecture Explorer查找代码http://msdn.microsoft.com/en-us/library/dd409431%28VS.100%29.aspx

RC下载http://www.microsoft.com/downloads/details.aspx?displaylang=en&FamilyID=457bab91-5eb2-4b36-b0f4-d6f34683c62a

Visual Studio 2010建筑发现&建模工具论坛:http://social.msdn.microsoft.com/Forums/en-US/vsarch/threads

答案 4 :(得分:0)

Structure101可以做到这一点。您可以通过程序集和/或命名空间浏览模型,并单击任何级别的任何依赖项,为您提供导致依赖项的所有代码级引用。 .NET版本处于测试阶段,但多年来它已经可用于其他语言,所以它非常成熟。这是一个屏幕截图示例。 alt text http://www.headwaysoftware.com/images/assemblies.jpg