2012-02-01 24 views
49

Tengo una versión de un paquete instalada en mi proyecto pero durante las pruebas he encontrado un problema con ella. Intenté lo obvio Update-Package -Id Foo.Bar -Version 1.0.0 -Force pero el cmdlet Update-Package no tiene un parámetro -Force, y no permite actualizaciones a una versión anterior. ¿Cómo puedo Downgrade mis dependencias del paquete (sin tomar ventaja de control de la fuente!)¿Cómo puedo "Actualizar paquete" a una versión anterior en la consola del Administrador de paquetes?


NOTA: Esta pregunta es ahora irrelevante porque Update-Package MyPackage -Version [an earlier version] trabaja fuera de la caja en las versiones recientes de Gestor NuGet paquete. Ni siquiera necesita un interruptor -Force.

+2

+1 para actualizar dos años después. – MEMark

+1

Gracias, @MEMark! –

Respuesta

35

Creo que ya tengo una solución a esto, así que lo coloco aquí para críticas (constructivas).

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 

} 

Esto nos permite utilizar una llamada como la siguiente para actualizar todas las referencias a un paquete dentro de la solución actual.

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

El interruptor -Force permite que el paquete que se va a instalar, incluso si tiene paquetes dependientes dentro del proyecto.

+0

No tuve la molestia de crear la función, pero la función dejó claro cómo hacerlo desde la consola PM, no obstante. ¡Gracias! –

+0

Gran solución. – AdamSane

+8

Para aquellos que no saben. Demasiado agregue una función a la consola del administrador de paquetes agregue "NuGet_profile.ps1" a \ WindowsPowerShell – AdamSane

5

Tenía Foo.Bar v1 que dependía de log4net v2, necesitaba degradar la dependencia de log4net a 1.2.10, así que hice que Foo.Bar v1.1 dependiera de log4net v1.2.10.

He encontrado que si Update-Package Foo.Bar se actualizará a la última versión (que no se vuelva a instalar dependencias)

Pero entonces usted puede Update-Package -Id Foo.Bar -Reinstall y que debe volver a instalar todo el asunto con las dependencias actuales.

10

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

Con NuGet 2,8 cliente o superior, Install-Package se puede utilizar para rebajar los paquetes existentes en su proyecto, si es necesario. Por ejemplo, si había instalado una versión preliminar de un paquete para probar nuevas características pero desea volver a una versión estable anterior, puede hacerlo usando Install-Package (o Update-Package).

+0

I <3 respuestas que solucionan un problema del futuro, debe haber una marca verde de "respuesta actualizada" – felickz

Cuestiones relacionadas