Как установить более старую версию пакета через NuGet?

384

Я хочу установить более старую версию пакета ( Newtonsoft.Json). Но NuGet откатывается.

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'.

Любая помощь будет оценена.

Небиде Йилдиз
источник
3
Возможный дубликат Загрузите старую версию пакета с Nuget
Дирк Воллмар

Ответы:

579

попробуйте следующее:

Uninstall-Package Newtonsoft.Json -Force

с последующим:

Install-Package Newtonsoft.Json -Version <press tab key for autocomplete>
Ксавье Декостер
источник
Твиттерайзер использует Newtonsoft.Json, я должен установить старую версию без удаления новой. PM> Uninstall-Package Newtonsoft.Json Uninstall-Package: Невозможно удалить 'Newtonsoft.Json 4.0.8', поскольку от него зависит 'twitterizer 2.4.0.26532'.
Небид Йилдиз
9
Вы не упомянули о существующих зависимостях в пакете, поэтому я не знал об этом: попробуйте добавить ключ -Force к команде uninstall-package (как отредактировано выше)
Xavier Decoster
Извините за мое отсутствие. -Сила сработала и я установил старую. Огромное спасибо.
Небид Йилдиз
при удалении бета-версии EntityFramework 6 для перехода на версию 5 я продолжал получать сообщения, предлагающие перезапустить VS для завершения удаления, но это не привело к удалению сообщения. Я просто вошел в папку с пакетами и удалил оттуда оставшуюся пустую древовидную структуру, и тогда она прошла успешно
Simon_Weaver
@Simon_Weaver Я подозреваю, что EF 6 pkg делает что-то, что вызывает это (заметил некоторый код AppDomain, например, в сценариях PowerShell, так что, скорее всего, VS удерживает некоторые из DLL)
Xavier Decoster
266

Начиная с Nuget 2.8 есть возможность понизить пакет.

Примечания к выпуску Nuget 2.8

Пример:

Следующая команда, введенная в Консоль диспетчера пакетов, понизит версию клиента couchbase до версии 1.3.1.0.

Update-Package CouchbaseNetClient -Version 1.3.1.0

Результат:

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].

На что следует обратить внимание в соответствии с нижеприведенным описанием:

«этот подход не работает для понижения с одной предварительной версии до другой предварительной версии - он работает только для перехода на версию выпуска»

Джеймс Роланд
источник
13
Теперь это должен быть принятый ответ как лучшее решение с минимальными усилиями.
Питер
Да, работает как очарование, включая понижение всех зависимостей - отлично
Питер
7
К сожалению, этот подход не работает для понижения с одной предварительной версии до другой предварительной версии - он работает только для перехода на версию выпуска.
Crimbo
@ Джеймс Роланд, было бы замечательно, если бы вы могли выделить в ответе предварительный выпуск с помощью
Crimbo
51

Я довольно часто использовал ответ Ксавье. Я хочу добавить, что ограничение версии пакета указанным диапазоном легко и полезно в последних версиях NuGet.

Например, если вы никогда не хотите Newtonsoft.Jsonобновлять предыдущую версию 3.x.xв своем проекте, измените соответствующий packageэлемент в вашем packages.configфайле, чтобы он выглядел следующим образом:

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

Обратите внимание на allowedVersionsатрибут. Это ограничит версию этого пакета версиями между 3.0( включительно ) и 4.0( эксклюзивно ). Затем, когда вы выполняете Update-Packageполное решение, вам не нужно беспокоиться об обновлении этого конкретного пакета по сравнению с предыдущей версией 3.x.x.

Документация по этой функциональности здесь .

кругозор
источник
4
Очень полезно, чтобы обновления NuGet не ломали ваше решение! (Microsoft.Net.Http v2.1.10, я смотрю на тебя ...)
Дуглас Барбин
6
Я смотрю на JQuery 1.9 и 2.0.
Мартин Браун
Microsoft.Owin для меня :-)
bikeman868
19

Теперь это очень сильно упростили в Visual Studio 2015+. Вы можете сделать это Downgrade / Upgradeв самом интерфейсе пользователя, не выполняя команды в консоли диспетчера пакетов.

  1. Right click on your projectи go to Manage Nuget Packages.

  2. Посмотрите на изображение ниже.

    • Select your Package and Choose the Version, который вы хотели установить.

Окно диспетчера пакетов Nuget

Очень Очень Просто, не так ли? :) Надеюсь это поможет...

RajeshKdev
источник
1
Ага! Это путь :)
Синдром самозванца
0

Еще один ручной вариант, чтобы получить его:

.nuget\nuget.exe install Newtonsoft.Json -Version 4.0.5
knocte
источник