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

Dam*_*ell 49 console powershell 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软件包管理器中开箱即用.你甚至不需要-Force开关.

Dam*_*ell 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

}
Run Code Online (Sandbox Code Playgroud)

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

 Get-Project -All |
     ?{ $_ | Get-Package | ?{ $_.Id -eq 'Foo.Bar' } } |
         %{ $_ | Reinstall-Package -Id Foo.Bar -version 1.0.0 -Force }
Run Code Online (Sandbox Code Playgroud)

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

  • 对于那些不知道的人.向包管理器控制台添加一个函数将"NuGet_profile.ps1"添加到<MyDoc>\WindowsPowerShell (8认同)
  • 好点,@ AdamSane.另一种编辑适用于任何PowerShell主机的配置文件的方法是`echo''>> $ profile; 记事本$ profile`.如果配置文件不存在,则会创建配置文件(如果配置文件没有,则创建一个空行),然后在记事本中打开该文件. (3认同)

小智 10

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

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


Jef*_*tin 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 和那应该重新安装当前依赖项的整个事情.