.NET C#导出解决方案的NuGet依赖关系

前言

公司项目需要写DS设计文档,文档需要标识出来你的解决方案文件下的所有项目都使用了NuGet哪些第三方依赖,我们都知道sln下面的所有.csproj文件中的节点下会标识出对应的依赖,但一个一个对比又太麻烦(主要是懒),有时候一个sln能有10几个project项目,能不能写脚本一键导出这些依赖关系呢?
效果如下图:

实现思路

  1. 首先根据dotnet命令可以直接导出对应依赖关系

dotnet list "$solutionPath" package --format json > dependencies.json

json中的结构如下图

  1. 转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"
posted @   Dyhuang  阅读(102)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· 百万级群聊的设计实践
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
· 永远不要相信用户的输入:从 SQL 注入攻防看输入验证的重要性
点击右上角即可分享
微信分享提示