Como instalar uma versão mais antiga do pacote via NuGet?


384

Quero instalar uma versão mais antiga de um pacote ( Newtonsoft.Json). Mas o NuGet reverte.

PM> Install-Package Newtonsoft.Json -Version 4.0.5
Successfully installed 'Newtonsoft.Json 4.0.5'.
Install failed. Rolling back...
Install-Package : Already referencing a newer version of 'Newtonsoft.Json'.

Qualquer ajuda será muito apreciada.


Respostas:


579

tente o seguinte:

Uninstall-Package Newtonsoft.Json -Force

Seguido por:

Install-Package Newtonsoft.Json -Version <press tab key for autocomplete>

twitterizer usa Newtonsoft.Json, eu tenho que instalar mais velhos sem desinstalar mais novos. PM> Desinstalar pacote Newtonsoft.Json Desinstalar pacote: Não foi possível desinstalar 'Newtonsoft.Json 4.0.8' porque 'twitterizer 2.4.0.26532' depende disso.
Nebide Yildiz

9
Você não mencionou dependências existentes ao pacote então eu estava unware de que: tente adicionar o interruptor -Force ao comando-pacote de desinstalação (tal como editada acima)
Xavier Decoster

Desculpe pela minha falta. -Force funcionou e eu instalei o mais antigo. Muito obrigado.
Nebide Yildiz

ao desinstalar o EntityFramework 6 beta para fazer o downgrade para a versão 5, recebi mensagens dizendo para reiniciar o VS para concluir a desinstalação, mas isso não removeu a mensagem. Eu só fui em pacotes de pasta e excluídos da estrutura de árvore vazio restante de lá e foi então bem-sucedida
Simon_Weaver

@Simon_Weaver Eu suspeito que a EF 6 pkg está fazendo algo que faz com que esse (notado algum código AppDomain por exemplo, nos scripts do PowerShell, então provavelmente VS está segurando alguns do dll)
Xavier Decoster

266

A partir do Nuget 2.8, há um recurso para fazer o downgrade de um pacote.

Notas de versão do Nuget 2.8

Exemplo:

O comando a seguir digitado no Package Manager Console fará o downgrade do couchbase client para a versão 1.3.1.0

Update-Package CouchbaseNetClient -Version 1.3.1.0

Resultado:

Updating 'CouchbaseNetClient' from version '1.3.3' to '1.3.1.0' in project [project name].
Removing 'CouchbaseNetClient 1.3.3' from [project name].
Successfully removed 'CouchbaseNetClient 1.3.3' from [project name].

Algo a ser observado conforme crimbo abaixo:

"essa abordagem não funciona para fazer o downgrade de uma versão de pré-lançamento para outra versão de pré-lançamento - só funciona para fazer o downgrade para uma versão de lançamento"


13
Agora, essa deve ser a resposta aceita, pois é a melhor solução com o mínimo de esforço.
Peter

Sim, funciona como um encanto, incluindo desclassificação todas as dependências - perfeito
peter

7
Infelizmente, essa abordagem não funciona para fazer o downgrade de uma versão de pré-lançamento para outra versão de pré-lançamento - só funciona para fazer o downgrade para uma versão de lançamento.
Crédit #

@ James Roland Seria ótimo se você pode destacar o aviso de pré-lançamento por crimbo sobre a resposta
eglasius

51

Eu usei a resposta de Xavier bastante. Quero acrescentar que restringir a versão do pacote a um intervalo especificado é fácil e útil nas versões mais recentes do NuGet.

Por exemplo, se você nunca deseja Newtonsoft.Jsonatualizar a versão anterior 3.x.xno seu projeto, altere o packageelemento correspondente no seu packages.configarquivo para ficar assim:

<package id="Newtonsoft.Json" version="3.5.8" allowedVersions="[3.0, 4.0)" targetFramework="net40" />

Observe o allowedVersionsatributo. Isso limitará a versão desse pacote a versões entre 3.0( inclusive ) e 4.0( exclusivo ). Então, quando você faz uma Update-Packagesolução completa, não precisa se preocupar com a atualização desse pacote específico na versão anterior 3.x.x.

A documentação para esta funcionalidade está aqui .


4
Muito útil para impedir que as atualizações do NuGet quebrem sua solução! (Microsoft.Net.Http v2.1.10, eu estou olhando para você ...)
Douglas Barbin

6
Eu estou olhando para o JQuery 1.9 e 2.0.
Martin Brown

Microsoft.Owin para mim :-)
bikeman868

19

Agora, é muito simplificado no Visual Studio 2015 + em diante. Você pode fazer isso Downgrade / Upgradena própria interface do usuário, sem executar comandos no console do gerenciador de pacotes.

  1. Right click on your projecte go to Manage Nuget Packages.

  2. Veja a imagem abaixo.

    • Select your Package and Choose the Version, que você queria instalar.

Janela Nuget Package Manager do Project

Muito, muito simples, não é? :) Espero que isto ajude...


11
Sim! Este é o caminho a percorrer :)
Síndrome Impostor

0

Outra opção mais manual para obtê-lo:

.nuget\nuget.exe install Newtonsoft.Json -Version 4.0.5
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.