如何批量更新多个解决方案中的NuGet包

9

我有一个包含很多解决方案的存储库。 有时我需要将一个包更新到较新版本。 逐个打开每个解决方案并通过 Visual Studio 更新太慢了。

有什么好方法可以一次性为同一 Git 存储库中的多个解决方案更新单个包到较新版本?

3个回答

1
我所做的就是使用Sublime查找替换需要更新的版本号。这个解决方案有风险,但是是我找到的唯一方案。
  • 我更新了解决方案文件中的引用和包配置文件中的版本号。

例如:将EntityFramework版本从4.3.0更新到6.0.0

  1. 更新解决方案文件 使用正则表达式查找: <Reference Include="EntityFramework((?s).*?)</Reference>
    位置: *.csproj
    替换为: <Reference Include=\"EntityFramework, Version=6.0.0.0\">\n\t\t<HintPath>$\(SolutionDir\)\\packages\\EntityFramework.6.0.0\\lib\\net45\\EntityFramework.dll<\/HintPath>\n\t<\/Reference>

  2. 更新包文件 使用正则表达式查找: <package id="EntityFramework" version="((?s).*?)" targetFramework="net45" />
    位置: packages.config
    替换为: <package id="EntityFramework" version="6.0.0" targetFramework="net45" />


1
NuGet有不同的前端,其中一个是命令行应用程序(下载),还允许更新包引用。Thomas Ardal提供了一个不错的PowerShell脚本,可用于跨多个解决方案更新包。
param(
    [Parameter(Mandatory=$true)]
    [string]$packageId
)

Get-ChildItem *.sln -recurse | %{.\\nuget.exe restore $_.fullname}

Get-ChildItem packages.config -Recurse `
  | Where-Object {$_ | Select-String -Pattern $packageId} `
  | %{.\\nuget.exe update -Id $packageId $_.FullName}

请注意,此方法不支持控制依赖行为,并将更新依赖项至其最高可用版本。

0

由于NuGet依赖于Visual Studio,因此您无法使用它来完成此操作,如此处所示。

但是,您可以使用名为Paket的替代品,该替代品可从命令行工作。

使用Paket,您可以全局管理整个存储库(或每个目录)的软件包,也可以创建批处理以更新每个解决方案的软件包。

全局或按目录管理软件包意味着您必须在paket管理的所有解决方案或目录下的所有解决方案中具有相同版本的软件包。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接