快速批量升级 NugetPackage 版本
生活随笔
收集整理的這篇文章主要介紹了
快速批量升级 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>
參考
- what-is-nuget
- powershell-reference
- Install and use a NuGet package in Visual Studio
總結
以上是生活随笔為你收集整理的快速批量升级 NugetPackage 版本的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 一篇文章彻底搞懂TiDB集群各种容量计算
- 下一篇: 开源大数据集群部署(二)集群基础环境实施