NuGet:通过PowerShell或CMD将软件包更新到所有项目中的特定版本

时间:2016-09-19 13:09:17

标签: powershell command-line nuget

我们有一个场景,不同的团队在更大的产品的不同部分工作。有时,所有解决方案的所有Visual Studio项目都需要更新一些引用的NuGet包。作为该更新的结果,整个源代码树中的所有项目都应该引用相同版本的包。

是否可以使用 PowerShell 脚本等自动方法将特定NuGet包更新为所有项目中的特定版本 ?< / p>

编辑: 有没有办法以某种方式加载Visual Studio和NuGet的必要部分以正确更新程序集引用

示例:

NuGetScript Update Solution.sln PackageName -version NewVersion

NuGetScript Update PathToProjects PackageName -version NewVersion

在Visual Studio中加载所有这些组件的组件太多,并通过包管理器UI手动更新它们。

3 个答案:

答案 0 :(得分:16)

请在Package Manager控制台窗口中使用以下命令行在一个解决方案中更新特定包。

  

Get-Project -All | Update-Package PackageName -Version newVersion

答案 1 :(得分:6)

您可以创建PowerShell脚本来搜索解决方案中的所有项目文件或packages.config文件,然后调用nuget update命令来更新软件包。

但是,在Visual Studio之外更新包时存在限制,我建议您从Visual Studio执行此操作:

  

更新命令将下载并提取所有新包   包文件夹。程序集引用将在项目中更新   文件,但这仅限于现有的引用。如果是新的   包有一个添加的程序集,它不会作为一部分添加   更新命令。新的包依赖关系也没有它们   装配参考添加。要执行完整更新,请使用Visual   工作室。

答案 2 :(得分:1)

在其他地方找到了以下脚本。我已经在我的项目中尝试过了。我没有原始链接

以下脚本可以:

    在文件夹内找到的所有解决方案上
  1. 运行restore命令
  2. 查找包含提供的包ID名称的所有packages.config文件
  3. 使用update文件和程序包名称作为参数运行packages.config命令

这假定nuget.exe存在于您要从中运行该文件的文件夹中

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}