NuGet:通过PowerShell或CMD将所有项目中的包更新为特定版本
我们有一个场景,不同的团队在一个更大产品的不同部分工作。有时,所有解决方案的所有VisualStudio项目都需要更新其引用的NuGet包。作为更新的结果,整个源代码树中的所有项目都应该引用相同版本的包 是否有一种方法可以使用一些自动方法(如PowerShell脚本)将所有项目中的特定NuGet包更新为特定版本 编辑: 是否有方法加载Visual Studio和NuGet的必要部分以正确更新程序集引用 例如:NuGet:通过PowerShell或CMD将所有项目中的包更新为特定版本,powershell,command-line,nuget,Powershell,Command Line,Nuget,我们有一个场景,不同的团队在一个更大产品的不同部分工作。有时,所有解决方案的所有VisualStudio项目都需要更新其引用的NuGet包。作为更新的结果,整个源代码树中的所有项目都应该引用相同版本的包 是否有一种方法可以使用一些自动方法(如PowerShell脚本)将所有项目中的特定NuGet包更新为特定版本 编辑: 是否有方法加载Visual Studio和NuGet的必要部分以正确更新程序集引用 例如: NuGetScript Update Solution.sln PackageName
NuGetScript Update Solution.sln PackageName -version NewVersion
或
组件太多,无法在Visual Studio中加载所有组件并通过package manager UI手动更新它们。请使用package manager控制台窗口中的以下命令行在一个解决方案中更新特定的包 获取项目-All |更新包PackageName-Version newVersion
您可以创建PowerShell脚本来搜索解决方案中的所有项目文件或packages.config文件,然后调用命令更新包 但是,在Visual Studio之外更新软件包时有一个限制,我建议您在Visual Studio中执行此操作: update命令将下载所有新包并将其解压缩到 包和文件夹。程序集引用将在项目中更新 文件,但这仅限于现有引用。如果一个新的 包有一个已添加的程序集,它将不会作为程序集的一部分添加 更新命令。新的包依赖项也将不具有 添加了程序集引用。要执行完整的更新,请使用Visual Studio 演播室 以下脚本在其他地方找到。我已经在我的项目中尝试过了。我没有原始链接 以下脚本执行以下操作:
restore
命令packages.config
文件packages.config
文件和包名作为参数运行update
命令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}
这是Package Manager控制台命令,需要在Visual Studio中的Package Manager控制台窗口中运行。除非有办法在不加载Visual Studio和所有项目的情况下加载Package Manager控制台,否则这不是可接受的答案。如果有,请不要这样做。您能给我一个您想要做什么的示例吗?可能来自此示例-
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}