2012-02-01 69 views
49

我有一个安装在我的项目中的软件包版本,但在测试期间我发现它有问题。我试过了显而易见的东西Update-Package -Id Foo.Bar -Version 1.0.0 -Force,但Update-Package cmdlet没有-Force参数,并且它不允许更新到早期版本。我怎么降级我的包的依赖关系(不考虑源控制的优势!)如何在软件包管理器控制台中将“更新软件包”更新为旧版本?


注:这个问题是现在无关,因为Update-Package MyPackage -Version [an earlier version]开箱的最新版本的NuGet包管理器。你甚至不需要-Force交换机。

+2

+1更新两年后。 – MEMark 2014-08-24 21:33:57

+1

谢谢,@MEMark! – 2014-08-25 22:57:28

回答

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开关允许重新安装软件包,即使它在项目中具有相关的软件包。

+0

我没有经历过创建函数的麻烦,但函数明确了如何从PM控制台执行此操作。谢谢! – 2012-03-23 19:31:41

+0

伟大的解决方案。 – AdamSane 2012-09-25 17:48:01

+8

对于那些不知道的人。添加一个函数到包管理器控制台添加“NuGet_profile.ps1”到 \ WindowsPowerShell – AdamSane 2012-09-25 17:48:52

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

10

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

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

+0

我<3个解决未来问题的答案,应该有一个“更新答案”绿色选中标记 – felickz 2015-06-19 20:33:34

相关问题