我目前正在将一个庞大的解决方案(约70个项目)从VS 2005 + .NET 2.0迁移到VS 2008 + .NET 3.5。目前我使用的是VS 2008 + .NET 2.0。
问题在于,我需要逐个将项目移动到新的.NET框架,确保没有.NET 2.0项目引用.NET 3.5项目。有没有工具可以给我提供项目依赖关系的图形表示?
我目前正在将一个庞大的解决方案(约70个项目)从VS 2005 + .NET 2.0迁移到VS 2008 + .NET 3.5。目前我使用的是VS 2008 + .NET 2.0。
问题在于,我需要逐个将项目移动到新的.NET框架,确保没有.NET 2.0项目引用.NET 3.5项目。有没有工具可以给我提供项目依赖关系的图形表示?
我需要类似的东西,但不想为此付费(或安装)工具。我创建了一个快速的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"
安装:
确保已安装dotnet 5运行时
确保已安装dotnet 6运行时
运行dotnet tool install dependensee --global
安装完成后,运行dependensee "path/to/root/of/csproj/files" "path/to/output.html"
默认情况下,它不包括nuget软件包,但可以使用-P
开关启用
要查看所有选项,请运行不带参数的dependensee
。
HTML输出如下
有命令行选项,允许您输出XML或JSON以进行进一步处理,无论是将其写入文件还是写入标准输出,如果必要,则可以将输出传输到其他命令行工具而不触及文件系统。
我编写了一款可能会对你有所帮助的工具。VS Solution Dependency Visualizer分析解决方案中的项目依赖关系,并从这些信息创建一个依赖图表,以及一份文本报告。
Visual Studio 2010架构发现和建模工具论坛: http://social.msdn.microsoft.com/Forums/en-US/vsarch/threads
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
Mandatory
和ValueFromPipeline
参数后添加= $true
。 - MoMo