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

实现思路
首先根据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"
.NET C#导出解决方案的NuGet依赖关系的更多相关文章
- 同一个解决方案或有依赖关系的两个项目引用同名但不同版本的DLL
问题描述 我们最近在使用Redis作Session的集中化,中间碰到了一个如下问题:我们有一些项目比较老,引用了NewtonJson的4.0.3.0版本的DLL,但是Redis提供的C#集成DLL引用 ...
- C/C++源代码的Include依赖关系图
前一篇博文中我曾仔细介绍过如何查看C/C++代码的依赖项关系图,在这篇文章中我将会介绍如何使用Visualization and Modeling Feature Pack 工具包,查看C/C++源代 ...
- 插件~Nuget中包与包的依赖关系
在Nuget管理包时,有可能A包的存在需要B包的支持,A包在安装之前,需要先安装B包,这就叫做依赖关系,而在NUGET里,确实有这种概念,比如大叔的Lind.DDD.Manager包,它就依赖于Lin ...
- nuget使用经验:复杂依赖关系下的包版本问题
背景 之前同事问到过1个关于nuget包被多层引用后,最终生效的版本的问题.当时通过在项目中重新安装了一次nuget包解决了. 现在来重新复盘一下当时的场景,顺便把这种场景下nuget处理逻辑分享给大 ...
- (摘)使用 .NET Core 实现依赖关系注入
为什么使用依赖关系注入? 使用 .NET,通过 new 运算符(即,new MyService 或任何想要实例化的对象类型)调用构造函数即可轻松实现对象实例化.遗憾的是,此类调用会强制实施客户端(或应 ...
- 90%的人都不知道的Node.js 依赖关系管理(上)
转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具.解决方案和服务,赋能开发者. 原文参考:https://dzone.com/articles/nodejs-dependency-mana ...
- 【循序渐进MVC】第一回——一物多用Project.json依赖关系之dependencies节点
Project.json统一了ASP.NET vNext之前版本的packages.config.NuGet 配置(nuspec)以及项目文件(csprojs):并集成在Project.json中. ...
- 谈谈.net模块依赖关系及程序结构
技术为解决问题而生. 上面这个命题并非本文重点,我将来有空再谈这个.本文也并非什么了不起的技术创新,只是分享一下我对.net模块依赖关系及程序结构方面的一些看法.先看一个最最简单的hello worl ...
- Gradle用户指南(章8:依赖关系管理基础)
章8:依赖关系管理基础 本章将介绍一些gradle依赖关系管理的基础 什么是依赖关系管理? 简略的说,依赖管理是由两部分组成的.首先,gradle需要知道你要构建或者运行的项目,以便找到它们.我们将这 ...
- 使用SchemaSpy逆向工程生成数据库依赖关系使用SchemaSpy工具可以快速的从数据库中得到
使用SchemaSpy逆向工程生成数据库依赖关系 使用SchemaSpy工具可以快速的从数据库中得到表的依赖关系,同时生成一个生动的“表图”结合的报告.方便快速了解数据库中的数据库对象间关系,类 ...
随机推荐
- Apache Maven ToolChains的使用
目录 简介 Toolchains的介绍 Toolchains的例子 Toolchains支持 总结 简介 Maven是java中非常有用和常用的构建工具,基本上现在大型的java项目都是Maven和g ...
- C 语言指针完全指南:创建、解除引用、指针与数组关系解析
C 语言中的指针 创建指针 我们可以使用引用运算符 & 获取变量的内存地址: int myAge = 43; // 一个 int 变量 printf("%d", myAge ...
- 深入解析 C 语言中的 for 循环、break 和 continue
C语言中的 for 循环 当您确切地知道要循环执行代码块的次数时,可以使用 for 循环而不是 while 循环 for (语句 1; 语句 2; 语句 3) { // 要执行的代码块 } 语句 ...
- Go 语言变量类型和声明详解
在Go中,有不同的变量类型,例如: int 存储整数(整数),例如123或-123 float32 存储浮点数字,带小数,例如19.99或-19.99 string - 存储文本,例如" H ...
- std::thread 二:互斥量(lock() & unlock())
mutex 互斥量的作用是保护共享数据 *:有 lock() 就一定要有 unlock() #include <iostream> #include <thread> # ...
- C#判断窗体是否被遮挡 - 开源研究系列文章
上次发布了托盘窗体的显示与隐藏的博文:,但是在测试窗体最大化的时候发现窗体没有隐藏,调试了下知道是窗体是否被遮挡这个函数的判断有问题.于是就研究了该代码,然后联系了该操作类的作者,也是博客园的园友,然 ...
- 顺通鞋业ERP管理系统
鞋业管理软件/鞋业管理系统/鞋业管理云平台 顺通鞋业ERP进销存系统拥有订货管理.销售管理.财务管理.产品管理.库存管理.客户管理.员工管理.查询统计等功能.顺通鞋业ERP进销存系统在管理信息系统业务 ...
- vue3 快速入门系列 —— 其他API
其他API 前面我们已经学习了 vue3 的一些基础知识,本篇将继续讲解一些常用的其他api,以及较完整的分析vue2 和 vue3 的改变. 浅层响应式数据 shallowRef shallow 中 ...
- Résumé Review 二分方法题解
一道非常好的数学题,不愧是CF的题,跟某些网站上的水题.恶心题没法比~ 题意 这里就要夸一下某谷了,翻译的很好,不像我,在CF上用deepl翻译,不够清晰(←全是废话) 分析 先不考虑 bi ,考虑转 ...
- 01_Vue技术-Hello案例分析
初始vue: 1.想让vue工作,就必须创建一个Vue实例,且要传入一个配置对象: 2.root容器里的代码依然符合html规范,只不过混入了一些特殊的vue语法: ...