快速批量升级 NugetPackage 版本
批量升级项目中的 Nuget
有时候我们需要升级整个解决方案中的某些Nuget版本,如果每个手动使用NuGet Package Manager
会很麻烦。经过一个周末的踩坑,我找到一个解决方案。
Name | OldVersion | NewVersion |
---|---|---|
Newtonsoft.Json | 13.0.1 | 13.0.3 |
Polly | 8.0.0 | 8.2.1 |
以下所有命令都需要在 Visual Studio Package Manager Console (程序包管理控制台) 中执行
具体路径为:Tools(工具) > NuGet Package Manager(NuGet包管理) > Package Manager Console(程序包管理控制台)
Get-Package
先使用Get-Package 命令看一下现有安装包的版本
PM> Get-Package -ProjectName ClassLibrary1
Id Versions ProjectName
-- -------- -----------
Newtonsoft.Json {13.0.1} ClassLibrary1
Polly {8.0.0} ClassLibrary1
PM>
当前项目安装的是版本 13.0.1
和 8.0.0
Update-Package
Update-Package命令可以升级指定包
PM> Update-Package -ProjectName ClassLibrary1 -Id Newtonsoft.Json -Version 13.0.3
正在还原 D:\Source\Repos\ClassLibrary1\ClassLibrary1.csproj 的包...
正在安装 NuGet 程序包 Newtonsoft.Json 13.0.3。
将资产文件写入磁盘。路径: D:\Source\Repos\ClassLibrary1\obj\project.assets.json
已还原 D:\Source\Repos\ClassLibrary1\ClassLibrary1.csproj (用时 5 毫秒)。
已从 ClassLibrary1 成功卸载“Newtonsoft.Json 13.0.1”
已将“Newtonsoft.Json 13.0.3”成功安装到 ClassLibrary1
执行 nuget 操作花费时间 101 毫秒
已用时间: 00:00:00.1531212
PM>
批量安装
为此需要写一段 PowerShell 脚本,先获取整个项目的指定包信息,每个进行判断。如果符合条件则更新。
# 定义要升级的包 key:packageName value:targetVersion
$packages = @{
"Newtonsoft.Json" = "13.0.3"
"Polly" = "8.2.1"
}
foreach ($packageName in $packages.Keys) { # 遍历要升级的包
Write-Host "--------------------$($packageName) BEGIN------------------------"
$targetVersion = $packages[$packageName] # 获取要升级的版本
# 获取项目包中已经安装的包信息 see https://learn.microsoft.com/en-us/nuget/reference/ps-reference/ps-ref-get-package
$projectPackages = Get-Package -Filter $packageName
foreach ($projectItem in $projectPackages) { # 处理每一个项目
Write-Host "--------------------$($projectItem.ProjectName) BEGIN------------------------"
if ($projectItem.Version -lt $targetVersion) { # 如果项目安装版本小于目标版本
Write-Host "Project: $($projectItem.ProjectName) ↑ $($packageName)"
Write-Host "Version: $($projectItem.Version) < 目标版本:$targetVersion"
# 执行升级 see https://learn.microsoft.com/en-us/nuget/reference/ps-reference/ps-ref-update-package
Update-Package -ProjectName $projectItem.ProjectName $packageName -Version $targetVersion
}
Write-Host "--------------------$($projectItem.ProjectName) END------------------------"
}
Write-Host "--------------------$($packageName) END------------------------"
}
输出日志
两个包都是先卸载,然后安装了指定版本。
执行的时候脚本代码没有换行而是一整行,在
PowerShell
管道中不支持Win
换行。所以需要把代码压缩成一行执行。
PM> $packages = @{"Newtonsoft.Json" = "13.0.3"; "Polly" = "8.2.1"}; foreach ($packageName in $packages.Keys) { Write-Host "--------------------$($packageName) BEGIN------------------------"; $targetVersion = $packages[$packageName]; $projectPackages = Get-Package -Filter $packageName; foreach ($projectItem in $projectPackages) { Write-Host "--------------------$($projectItem.ProjectName) BEGIN------------------------"; if ($projectItem.Version -lt $targetVersion) { Write-Host "Project: $($projectItem.ProjectName) ↑ $($packageName)"; Write-Host "Version: $($projectItem.Version) < 目标版本:$targetVersion"; Update-Package -ProjectName $projectItem.ProjectName $packageName -Version $targetVersion } Write-Host "--------------------$($projectItem.ProjectName) END------------------------" } Write-Host "--------------------$($packageName) END------------------------" }
--------------------Polly BEGIN------------------------
--------------------ClassLibrary1 BEGIN------------------------
Project: ClassLibrary1 ↑ Polly
Version: 8.0.0 < 目标版本:8.2.1
正在还原 D:\Source\Repos\ClassLibrary1\ClassLibrary1.csproj 的包...
正在安装 NuGet 程序包 Polly 8.2.1。
将资产文件写入磁盘。路径: D:\Source\Repos\ClassLibrary1\obj\project.assets.json
已还原 D:\Source\Repos\ClassLibrary1\ClassLibrary1.csproj (用时 5 毫秒)。
已从 ClassLibrary1 成功卸载“Polly 8.0.0”
已从 ClassLibrary1 成功卸载“Polly.Core 8.0.0”
已将“Polly 8.2.1”成功安装到 ClassLibrary1
已将“Polly.Core 8.2.1”成功安装到 ClassLibrary1
执行 nuget 操作花费时间 117 毫秒
已用时间: 00:00:00.3168864
--------------------ClassLibrary1 END------------------------
--------------------Polly END------------------------
--------------------Newtonsoft.Json BEGIN------------------------
--------------------ClassLibrary1 BEGIN------------------------
Project: ClassLibrary1 ↑ Newtonsoft.Json
Version: 13.0.1 < 目标版本:13.0.3
正在还原 D:\Source\Repos\ClassLibrary1\ClassLibrary1.csproj 的包...
正在安装 NuGet 程序包 Newtonsoft.Json 13.0.3。
将资产文件写入磁盘。路径: D:\Source\Repos\ClassLibrary1\obj\project.assets.json
已还原 D:\Source\Repos\ClassLibrary1\ClassLibrary1.csproj (用时 6 毫秒)。
已从 ClassLibrary1 成功卸载“Newtonsoft.Json 13.0.1”
已将“Newtonsoft.Json 13.0.3”成功安装到 ClassLibrary1
执行 nuget 操作花费时间 81 毫秒
已用时间: 00:00:00.1507802
--------------------ClassLibrary1 END------------------------
--------------------Newtonsoft.Json END------------------------
PM>
再次看一下现有安装包的版本,包都被安装为指定版本了。
PM> Get-Package -ProjectName ClassLibrary1
Id Versions ProjectName
-- -------- -----------
Newtonsoft.Json {13.0.3} ClassLibrary1
Polly {8.2.1} ClassLibrary1
PM>
参考
快速批量升级 NugetPackage 版本的更多相关文章
- 非关系型数据库来了,CRL快速开发框架升级到版本4
轮子?,我很任性,我要造不一样的轮子,同时支持关系型和非关系型的框架有没有 新版数据查询作了些调整,抽象了LabmdaQueryy和DBExtend,升级到版本4,非关系数据库MongoDB被支持了! ...
- DELL RACADM 批量升级戴尔IDRAC固件
需求:通过服务器远程管理IP批量升级戴尔IDRAC固件 工具:racadm.ipmitool.Remote Access Configuration Tool 下载: 第一步,将要更新BMC IP写入 ...
- ubuntu下升级R版本
ubuntu下升级R版本 在测试<机器学习 实用案例解析>一书的邮件分类代码时,windows系统下rstudio中无法读取特殊字符,在ubuntu下可以.在ubuntu虚拟机下安装t ...
- Mac中使用port升级gcc版本
Mac OS中的gcc版本可能不会满足实际使用要求,需要对其升级. 这里介绍使用port方式来升级gcc版本.Macports是Mac OS中的软件包管理工具. 首先,安装Macports 这里提供O ...
- 如何升级Ceph版本及注意事项
升级软件版本在日常运维中是一个常见操作. 本文分享一下Ceph版本升级的一些经验. 一般升级流程和注意如下: 1. 关注社区Release notes 和 ceph-user邮件订阅列表,获取社区发 ...
- Windows2000安装Winform Clickonce提示升级系统版本的解决方案
Windows2000安装Winform Clickonce提示升级系统版本.只需要把所有应用的DLL的独立性设置为false就可以了.
- 关于linux服务器的批量维护、批量升级、
由于版权费用原因,众多中小服务器采用linux服务器进行功能处理.在进行批量升级.更新业务程序时.可以采用如下批量方案: 1.打包成rpm包,并配置yum源服务器,以支持个人的yum服务器进行处理.一 ...
- wdcp升级php版本到5.3,5.5
官网省级方法 wget http://down.wdlinux.cn/in/php_up53.shsh php_up53.sh 看到"php update is OK"提示表示,顺 ...
- PHPNow升级PHP版本为5.3.5的方法
在WIN上有时候需要测试一些PHP程序,又不会自行独立配置环境,那么PHPNow是非常好的选择,这篇文章主要为大家分享下如果将phpnow的php版本升级为5.3.5 在WIN上有时候需要测试一些 ...
- PHPNow升级PHP版本的方法
在WIN上有时候需要测试一些PHP程序,又不会自行独立配置环境,那么PHPNow是非常好的选择. PHPNow自带的PHP版本为5.2.14,而最后一次更新在于2010-9-22,PHP5.2对于现在 ...
随机推荐
- Springboot 实现QQ登录(界面跳转)
Springboot 实现QQ登录(界面跳转) 现在第三方登录已经变成主流app的登录方式了 今天记录一下如何给自己的网站实现第三方登录(这里以QQ登录为例) 准备工作 首先确保你准备好你自己网站的域 ...
- c语言代码练习8
//输入两个数组,输出两个数字的最大公约数#define _CRT_SECURE_NO_WARNINGS 1 #include <stdio.h> int main() { int n = ...
- 12. 用Rust手把手编写一个wmproxy(代理,内网穿透等), TLS的双向认证信息及token验证
12. 用Rust手把手编写一个wmproxy(代理,内网穿透等), TLS的双向认证信息及token验证 项目 ++wmproxy++ gite: https://gitee.com/tickbh/ ...
- mysql修改密码和开启远程访问
mysql默认是关闭远程访问的,开启命令如下 1.首先打开mysql所在的bin目录,C:\Program Files\MySQL\MySQL Server 5.5\bin 在地址栏输入cmd,回车 ...
- QT(1)- QString
QT(1)- QString 1 简介 在Qt中表示字符串的类是QString类,它存储字符串是采用的Unicode码,编码方式是使用UTF-16来进行编码的,也就是一个字符(两个字节),一个中文汉字 ...
- C++基础杂记(2)
将数组传入函数 禁止修改数组的值 函数的地址与函数的指针 函数的指针数组 函数的 static 与 inline 引用左值和引用传参 C++11 的数组 for 循环 64 位 Linux 操作系统中 ...
- Java技术_基础技术(0003)_类执行顺序详解+实例(阿里面试题)+详细讲解+流程图
类加载机制 加载.验证.准备.初始化和卸载这5个阶段的顺序是确定的,类的加载过程必须按照这种顺序按部就班地开始,而解析阶段则不一定:它在某些情况下可以在初始化阶段之后再开始,这是为了支持Java语言的 ...
- NLP技术如何为搜索引擎赋能
在全球化时代,搜索引擎不仅需要为用户提供准确的信息,还需理解多种语言和方言.本文详细探讨了搜索引擎如何通过NLP技术处理多语言和方言,确保为不同地区和文化的用户提供高质量的搜索结果,同时提供了基于Py ...
- 编程技巧 --- VS如何调试.Net源码
引言 如题,在VS中如何调试 .Net 源码呢? 一般来说,VS2022,都是默认启用 F12 转到定义能够看到源码,如果大家发现自己无法使用 F12 查看源码,可以在 "工具" ...
- 提升效率,打通万里牛ERP与下游用友U8财务软件的无缝对接
一.对接流程 1.1 销售/售后流程 在万里牛订单出库后,通过轻易云数据集成平台将数据推送至用友U8销售订单和销售出库单,这些单据可以进行关联操作. 当万里牛售后单完成退货入库后,通过数据集成平台将数 ...