Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
NuGet:通过PowerShell或CMD将所有项目中的包更新为特定版本_Powershell_Command Line_Nuget - Fatal编程技术网

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

NuGet:通过PowerShell或CMD将所有项目中的包更新为特定版本,powershell,command-line,nuget,Powershell,Command Line,Nuget,我们有一个场景,不同的团队在一个更大产品的不同部分工作。有时,所有解决方案的所有VisualStudio项目都需要更新其引用的NuGet包。作为更新的结果,整个源代码树中的所有项目都应该引用相同版本的包 是否有一种方法可以使用一些自动方法(如PowerShell脚本)将所有项目中的特定NuGet包更新为特定版本 编辑: 是否有方法加载Visual Studio和NuGet的必要部分以正确更新程序集引用 例如: NuGetScript Update Solution.sln PackageName

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

是否有一种方法可以使用一些自动方法(如PowerShell脚本)将所有项目中的特定NuGet包更新为特定版本

编辑: 是否有方法加载Visual Studio和NuGet的必要部分以正确更新程序集引用

例如:

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
    命令
  • 查找包含提供的包id名称的所有
    packages.config
    文件
  • 使用
    packages.config
    文件和包名作为参数运行
    update
    命令
  • 这假定运行此操作的文件夹中存在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}
    

    这是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}