.NET C#导出解决方案的NuGet依赖关系
前言
公司项目需要写DS设计文档,文档需要标识出来你的解决方案文件下的所有项目都使用了NuGet哪些第三方依赖,我们都知道sln下面的所有.csproj文件中的
效果如下图:
实现思路
-
首先根据dotnet命令可以直接导出对应依赖关系
dotnet list "$solutionPath" package --format json > dependencies.json
json中的结构如下图
-
转csv格式
json格式中我们需要项目名称,依赖名称,和依赖版本
可以通过powershell脚本直接将json文件读取为csv格式。
具体代码
# 定义解决方案路径
$solutionPath = "E:\Develop\src\gitee-open-source\dya-wechat-connect\Dya.Wechat.Connect\Dya.Wechat.Connect.sln"
# 定义 JSON 文件路径
$jsonFilePath = Join-Path -Path (Split-Path $solutionPath) -ChildPath "dependencies.json"
# 使用 dotnet list 命令生成解决方案依赖信息,并输出到 JSON 文件中
dotnet list "$solutionPath" package --format json > dependencies.json
# 读取 JSON 文件内容
$jsonContent = Get-Content $jsonFilePath | ConvertFrom-Json
# 初始化 CSV 行数组
$csvRows = @()
# 遍历项目
foreach ($project in $jsonContent.projects) {
$projectPath = $project.path
$projectFramework = $project.frameworks[0].framework
$projectName = [System.IO.Path]::GetFileNameWithoutExtension($projectPath)
# 检查是否有顶级包
if ($project.frameworks[0].topLevelPackages) {
# 遍历顶级包
foreach ($package in $project.frameworks[0].topLevelPackages) {
$packageId = $package.id
$packageResolvedVersion = $package.resolvedVersion
# 创建 CSV 行
$csvRow = [PSCustomObject]@{
'projectName' = $projectName
'path' = $projectPath
'framework' = $projectFramework
'package' = $packageId
'version' = $packageResolvedVersion
}
# 添加到 CSV 行数组
$csvRows += $csvRow
}
}
else {
# 如果没有顶级包,创建包含空值的 CSV 行
$csvRow = [PSCustomObject]@{
'projectName' = $projectName
'path' = $projectPath
'framework' = $projectFramework
'package' = $null
'version' = $null
}
# 添加到 CSV 行数组
$csvRows += $csvRow
}
}
# 拼接输出 CSV 文件路径
$outputFilePath = Join-Path -Path (Split-Path $jsonFilePath) -ChildPath "dependencies.csv"
# 将数据导出为 CSV 文件
$csvRows | Export-Csv -Path $outputFilePath -NoTypeInformation
Write-Host "CSV 文件已生成:$outputFilePath"
如果需要运行的时候,直接使用ps传参即可。如下代码:
.\your_script.ps1 -solutionPath "C:\project\yourSolution.sln"