如何在软件包pipe理器控制台中将“更新软件包”更新为旧版本?

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


注意:这个问题现在是不相关的,因为在最近版本的NuGet Package Manager中Update-Package MyPackage -Version [an earlier version]开箱即用。 你甚至不需要一个-Force开关。

我想我已经有了一个解决scheme,所以我把它放在这里(build设性的)批评。

 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 } 

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

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

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

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

使用NuGet 2.8客户端或更高版本 ,如有必要,Install-Package可用于降级项目中的现有软件包。 例如,如果您已经安装了预发行版本的软件包以尝试新function,但是想回到以前的稳定版本,则可以使用Install-Package(或Update-Package)来执行此操作。

我有依赖于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重新安装,并应该重新安装与当前的依赖关系的整个事情。