如何一次更新许多解决方案中的nuget包

时间:2015-07-31 22:23:37

标签: nuget

我有一个包含大量解决方案的存储库。 有时我需要将一个包更新到更新的版本。 这是通过视觉工作室减慢打开每个解决方案和更新的方法。

同时在同一个git存储库中为多个解决方案更新单个包到更新版本的最佳方法是什么?

3 个答案:

答案 0 :(得分:1)

我所做的只是在sublime的帮助下找到需要更新的版本号。这个解决方案有风险,但是我找到的唯一一个。

  • 我更新了解决方案文件和版本中的引用 package.config文件中的数字。

例如: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 :(得分:0)

你不能用NuGet做到这一点,因为它依赖于Visual Studio,因为你可以看到here

但是,您可以使用名为Paket的NuGet替代方法,它可以在命令行中运行。

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

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

答案 2 :(得分:0)

NuGet带有不同的前端,其中一个是命令行应用程序(Download),该应用程序还允许更新程序包引用。 Thomas Ardal提供了一个nice PowerShell script,可用于更新多个解决方案中的软件包:

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}

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

相关问题