.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"
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· 百万级群聊的设计实践
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
· 永远不要相信用户的输入:从 SQL 注入攻防看输入验证的重要性