首页 > 编程语言 >.NET C#导出解决方案的NuGet依赖关系

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

时间:2024-03-28 21:56:08浏览次数:43  
标签:project 依赖 package C# NuGet json Path NET CSV

前言

公司项目需要写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"

标签:project,依赖,package,C#,NuGet,json,Path,NET,CSV
From: https://www.cnblogs.com/dyhuang/p/18102248

相关文章

  • Finereport11 类Excel筛选
    微信公众号:次世代数据技术关注可了解更多的教程。问题或建议,请公众号留言或联系本人;微信号:weibw162本教程视频讲解可以关注本人B站账号进行观看:weibw162一、需求描述在使用FIneReport软件开发时,我们希望前台报表展示时可以类似Excel表格筛选那样,在表头进行多选筛选过滤显......
  • certutil 命令参数
    Certutil是Windows操作系统中的一个命令行实用程序,它用于执行各种与证书相关的操作。这些操作包括安装、配置和管理数字证书、证书颁发机构(CA)和证书链等。Certutil还可以用于查看证书的详细信息、导出和导入证书、验证证书的有效性,以及执行其他与证书相关的任务。Certu......
  • CIPHER命令 参数 显示或更改 NTFS 分区上目录[文件]的加密
    CIPHER是Windows操作系统中的一个命令行工具,用于执行文件和文件夹加密、解密以及管理加密密钥的操作。它主要用于对NTFS文件系统上的文件和文件夹进行加密,以保护数据的安全性。使用CIPHER命令,用户可以执行以下操作:加密文件和文件夹:通过指定路径和选项,可以对文件和文件......
  • 新机器安装docker (新手笔记)-- 知其所以然
    1.安装Docker-2024.03.28官方手册清华大学开源软件镜像站|可从主页找到Docker资源#AddDocker'sofficialGPGkey:sudoapt-getupdatesudoapt-getinstallca-certificatescurlsudoinstall-m0755-d/etc/apt/keyringssudocurl-fsSLhttps://download.docker......
  • Ubuntu22.04下Issac Gym/宇树机器人RL&gcc/g++,CUDA,CUDA ToolKit,Pytorch配置环境配
    前置条件本随笔写作Condition:在本人3050Ti笔记本上配好环境后,再在室友4060笔记本上边配边记录整理所得。室友的系统已经配好了相应驱动,因此,本随笔内容基于已经安装了NVIDIA显卡驱动的系统。下次搞到没装驱动的系统我再补一个随笔。宇树机器人宇树科技的文档中心有一个简单的安......
  • 硬件组成-CPU-编码-浮点数
    计算机的基本硬件系统由运算器、控制器、存储器、输入设备和输出设备5大部件组成。运算器、控制器等部件被集成在一起统称为中央处理单元(CPU)。CPU是硬件系统的核心,用于数据的加工处理,能完成各种算术、逻辑运算及控制功能。存储器是计算机系统中的记忆设备,分为内部存储器和......
  • (7-6)行为预测算法:基于Trajectron++模型的行为预测系统
    7.6 基于Trajectron++模型的行为预测Trajectron++是一个用于多目标轨迹预测和规划的深度学习模型,旨在应对自动驾驶和机器人等领域中的挑战,其中多个移动目标需要被准确地预测其未来运动轨迹,以便做出智能决策。7.6.1 Trajectron++模型的特点Trajectron++模型的主要特点和......
  • 从0开始教你用VScode远程连接到Linu来写代码(纯干货分享!!!新手友好篇)
     文章中汉字部分皆被代码所代替,宝宝们在复制粘贴的时候要选好对应的开源镜像站链接,详情请见评论区,我已放好相应代码!!!!!一、虚拟机的安装:安装所必须用到的软件如下:1.vmwarestation破解版(版本至少14以上)2.Xshell7破解版(最新版本即可)3.Git-bath(官方版即可)4.vscode(官方版即可......
  • 【概率论与数理统计】Chapter2 随机变量及其分布
    随机变量与分布函数随机变量随机变量:一个随机变量是对随机现象可能的结果的一种数学抽象分布函数分布函数:X为随机变量,F(x)......
  • JavaScript Fetch API请求和响应
    JavaScriptFetchAPI请求和响应 //加载进场工人不安全行为数据varloadAllWorkerUsafeData=setInterval(function(){consturl=`http://35.98.90.55/api/info?project=23`;fetch(url).then(response=>response.json()).then(data=>{varhandle_c......