如何在软件包管理器控制台中“更新 - 打包”到以前的版本?

时间:2012-02-01 16:42:39

标签: powershell console nuget nuget-package

我的项目中安装了一个软件包版本,但在测试过程中我发现了一个问题。我尝试了显而易见的事情Update-Package -Id Foo.Bar -Version 1.0.0 -Force,但Update-Package cmdlet没有-Force参数,并且它不允许更新早期版本。如何降级我的包依赖项(不使用源代码控制!)


注意:此问题现在无关紧要,因为Update-Package MyPackage -Version [an earlier version]在最新版本的NuGet Package Manager中开箱即用。您甚至不需要-Force切换。

3 个答案:

答案 0 :(得分:35)

我想我已经有了解决方案,所以我把它放在这里(建设性的)批评。

function Reinstall-Package {

    param(
        [Parameter(Mandatory = $true)]
        [string]
        $Id,

        [Parameter(Mandatory = $true)]
        [string]
        $Version,

        [Parameter(ValueFromPipeline = $true, ValueFromPipelineByPropertyName = $true)]
        [string]
        $ProjectName,

        [switch]
        $Force
    )

    if (-not $ProjectName) {
        $ProjectName = (get-project).ProjectName
    }

    Uninstall-Package -ProjectName $ProjectName -Id $Id -Force:$Force
    Install-Package -ProjectName $ProjectName -Id $Id -Version $Version

}

这允许我们使用诸如以下的调用来更新当前解决方案中对包的所有引用。

 Get-Project -All |
     ?{ $_ | Get-Package | ?{ $_.Id -eq 'Foo.Bar' } } |
         %{ $_ | Reinstall-Package -Id Foo.Bar -version 1.0.0 -Force }

-Force开关允许重新安装软件包,即使它在项目中具有依赖软件包。

答案 1 :(得分:10)

https://docs.nuget.org/consume/package-manager-console-powershell-reference

  
    

使用NuGet 2.8客户端或更高版本,如有必要,可以使用Install-Package降级项目中的现有包。例如,如果您已经安装了软件包的预发行版本以试用新功能但又希望返回到以前的稳定版本,则可以使用Install-Package(或Update-Package)来实现。

  

答案 2 :(得分:5)

我有依赖于log4net v2的Foo.Bar v1,我需要将log4net依赖关系降级到1.2.10所以我做了Foo.Bar v1.1依赖于log4net v1.2.10。

我发现如果你Update-Package Foo.Bar它会更新到最新版本(它不会重新安装依赖项)

但是你可以Update-Package -Id Foo.Bar -Reinstall,那应该用当前的依赖关系重新安装整个事物。