我们有一个场景,不同的团队在更大的产品的不同部分工作。有时,所有解决方案的所有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手动更新它们。
答案 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)
在其他地方找到了以下脚本。我已经在我的项目中尝试过了。我没有原始链接
以下脚本可以:
restore
命令packages.config
文件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}