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.

Nebide Yildiz
fonte
3
possível duplicata de download versão antiga do pacote com NuGet
Dirk Vollmar

Respostas:

579

tente o seguinte:

Uninstall-Package Newtonsoft.Json -Force

Seguido por:

Install-Package Newtonsoft.Json -Version <press tab key for autocomplete>
Xavier Decoster
fonte
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"

James Roland
fonte
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 .

ken
fonte
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...

RajeshKdev
fonte
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
knocte
fonte