Visual Studio项目的依赖关系图

Mig*_*gol 118 .net migration dependencies graph visual-studio

我目前正在将一个大型解决方案(约70个项目)从VS 2005 + .NET 2.0迁移到VS 2008 + .NET 3.5.目前我有VS 2008 + .NET 2.0.

问题是我需要逐个移动项目到新的.NET框架,确保没有.NET 2.0项目引用.NET 3.5项目.有没有什么工具能给我一个很好的项目依赖图?

Dan*_*eny 149

我需要类似的东西,但不想支付(或安装)工具来做它.我创建了一个快速的PowerShell脚本,它通过项目引用并以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"
Run Code Online (Sandbox Code Playgroud)

示例图

  • @ssc在我的博客上发布的稍微更新的代码可能更容易调整:http://blog.dantup.com/2012/05/free-dependency-graph-generation-using-powershell-and-yuml (5认同)
  • 真棒.我拿了这个并扩展它以完成所有子项目,然后再次扩展它以获取一个sln文件而不是映射整个项目.谢谢 (4认同)
  • 如果您正在使用Powershell 2.0,则需要将`= $ true`附加到`Mandatory`和`ValueFromPipeline`参数 (4认同)

Shk*_* S. 71

更新:从版本8开始,ReSharper内置了"View Project Dependencies"功能.

ReSharper版本<8具有内部功能,可在使用yFiles查看器时显示依赖关系图.请参阅帖子底部的快速手册.

在此输入图像描述

如何

  1. 这里安装yEd工具.
  2. 使用/resharper.internal命令行参数运行VS.
  3. 转到ReSharper/Internal/Show Dependencies.
  4. 指定要包含在"大图"中的项目.
  5. 除非您需要,否则请取消选中"排除终端节点...".
  6. 按"显示".
  7. 在yEd中使用分层布局(Alt + Shift + H)
  8. 提供反馈=)

  • Resharper&gt;建筑&gt;“显示项目依赖图” (5认同)
  • 还有Resharper> Inspect> Project Hierarchy以获取引用当前项目的项目列表 (2认同)

Mad*_*han 51

制作了 powershell 脚本等。在这里发布到 dotnet 工具中。

尝试DependenSee

安装

  • 确保您已安装 dotnet 5 运行时

  • 确保您已安装 dotnet 6 运行时

  • 跑步dotnet tool install dependensee --global

  • 安装后,运行dependensee "path/to/root/of/csproj/files" "path/to/output.html"

  • 默认情况下它不包含 nuget 包,但可以通过-Pswitch启用

  • 要查看所有选项,请dependensee不带参数运行。

HTML 输出看起来像这样

相关参见图

针对持续集成场景

有一些命令行选项允许您输出 XML 或 JSON 以进行进一步处理,可以将它们写入文件或写入标准输出,从而允许将输出通过管道传输到其他命令行工具,而无需在必要时接触文件系统。

  • 如果您只想查看项目依赖关系(这就是我的情况),这是迄今为止最简单、最好的实际解决方案。好工作! (3认同)
  • 不错的工具,使用简单,立即生效。唯一的问题是,对于具有“更狂野”项目依赖性的解决方案,图表可能会变得非常混乱,并且在某些地方,箭头彼此非常接近,以至于无法区分 (2认同)

Eri*_*ono 38

你试过NDepend吗?它将向您显示依赖项,您还可以分析类和方法的可用性.

他们的网站:

http://ndepend.com

  • 在撰写此答案时它可能是免费的,但现在不是了。 (6认同)
  • 原始海报没有说 ndepend 是免费的,它解决了问题。 (4认同)
  • 对于那些贬低我的答案的人,请告诉我原因. (3认同)
  • 我没有拒绝投票,但这是一个审判 (3认同)
  • @PatrickfromNDependteam 额外的细节和屏幕截图都可以。但由于这最初是我的答案,看起来你的编辑不知何故让我看起来像在 NDepend 工作。请在您的编辑中添加新答案,并强调您的新答案是对我答案的补充。先谢谢了:) (3认同)
  • 有趣的是,像 NDepend 这样的商业团体劫持了高票答案来插入他们的产品。令人惊讶的是 StackOverflow 允许这种事情。 (3认同)

小智 31

您可以使用Visual Studio 2010 Ultimate轻松获取项目依赖关系图,扫描到此视频的5分钟内查看:http://www.lovettsoftware.com/blogengine.net/post/2010/05/27/Architecture-Explorer的.aspx

在Visual Studio 2010 Ultimate:架构| 生成依赖关系图| 通过大会.

  • 博客链接是 404。这篇文章在其他地方还存在吗? (3认同)

dev*_*vio 18

我写了一个可以帮助你的工具.VS解决方案依赖性Visualizer分析解决方案中的项目依赖关系,并根据此信息创建依赖关系图表以及文本报告.


Pic*_*ett 9

我有一个类似的问题,但它更复杂,因为有几个项目引用了同一个程序集的不同版本.

要获得包含版本信息的输出并检查可能的运行时程序集加载问题,我创建了此工具:

https://github.com/smpickett/DependencyViewer

(直接链接到github发布:https://github.com/smpickett/DependencyViewer/releases)


Est*_*SFT 8

您可以在VS 2010 Ultimate中创建项目的依赖关系图.Architecture Explorer允许您浏览解决方案,选择项目以及要显示的关系,然后根据您的选择创建依赖关系图.

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

如何:从代码生成图形文档: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.aspxdisplaylang = en&FamilyID = 457bab91-5eb2-4b36-b0f4- d6f34683c62a.

Visual Studio 2010体系结构发现和建模工具论坛:http://social.msdn.microsoft.com/Forums/en-US/vsarch/threads


Wil*_*ill 6

如果您正在寻找一种不需要任何外部工具的方法,您可以导航到项目的obj/project.assets.json文件。该文件是在构建期间生成的,并且具有依赖项的分层 JSON 结构(项目引用和 nuget 包)。

它对于回答诸如“为什么这个项目 DLL 被拉到构建目录中?”之类的问题很有用。


Pat*_*eam 5

要完成NDepend生成的图表上的eriawan答案,请参阅下面的屏幕截图.您可以下载并使用 NDepend 的免费试用版一段时间.

有关NDepend依赖关系图的更多信息 在此输入图像描述

有关NDepend依赖矩阵的更多信息: 在此输入图像描述

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


Nik*_*iou 5

PowerShell的解决方案是最好的。我将它改编成一个在我的机器(TM)上运行的 bash 脚本:

#!/bin/bash

for i in `find . -type f -iname "*.csproj"`; do
    # get only filename
    project=`basename $i`

    # remove csproj extension
    project=${project%.csproj}

    references=`cat $i | grep '<ProjectReference' | cut -d "\"" -f 2`
    for ref in $references; do
        # keep only filename (assume Windows paths)
        ref=${ref##*\\}

        # remove csproj extension
        ref=${ref%.csproj}

        echo "[ $project ] -> [ $ref ]"
    done

done
Run Code Online (Sandbox Code Playgroud)