Восстановление пакетов NuGet до последней версии

В проекте я использовал некоторые пользовательские источники NuGet. По-видимому, некоторые из них больше не доступны, но у меня есть более новые (и только более новые) версии пакетов на другом (все еще работающем) сервере. Есть ли способ восстановить пакеты непосредственно до новейших версий без ручной замены всех ссылок в файлах .csproj и packages.config?

Я пытался запустить Updade-Package -Reinstall, но получаю только следующее сообщение об ошибке:

Some NuGet packages are missing from the solution. The packages need to be restored in order to build the dependency graph. Restore the packages before performing any operations.


person Doro    schedule 02.10.2018    source источник


Ответы (1)


Если некоторые пакеты, которые вы используете (и все еще хотите использовать), больше не доступны, я предлагаю вам сделать их резервную копию.

Найдите кеш Nuget. на вашем сервере. В Windows это находится по адресу

%userprofile%.nuget\packages

Найдите пакеты (и версию), для которых вы хотите создать резервную копию, и скопируйте файлы .nupkg в соответствующие папки.

Тогда у вас есть два варианта:

  1. Создайте частную ленту Nuget
  2. Создайте локальный канал Nuget на своем компьютере для разработки

Преимущество первого варианта состоит в том, что он является единым источником, который можно использовать на любой машине (компьютер разработки, сервер сборки и т. д.), но у вас будет больше настроек, особенно для аутентификации/авторизации (потому что это приватный канал)

Для 2-го варианта: Просто создайте папку C:/Nuget и поместите в нее любые .nupkg, какие хотите. Затем в Visual Studio перейдите к:

Инструменты -> Диспетчер пакетов Nuget -> Настройки диспетчера пакетов -> Источники пакетов

Нажмите зеленую кнопку +, чтобы добавить новый источник, просто дайте ему имя Local и перейдите к своему C:/Nuget, чтобы установить источник.

С этого момента, когда вы захотите восстановить свои пакеты Nuget, Visual Studio сначала просматривает канал nuget.org, и если он не находит упомянутые пакеты, затем просматривает ваш локальный канал и кэширует установленный пакет в %userprofile%.nuget\packages вашей машины. .

Я надеюсь, что отвечая на ваш вопрос, я не совсем уверен в том, что вы спросили, и в ваших знаниях о Nuget.

ОБНОВЛЕНИЕ:

Думаю, теперь я лучше понимаю ваш вопрос.

Прежде всего, я думаю, вы неправильно понимаете команду Update-Package -Reinstall. Он переустановит пакеты с той же версией, на которую уже ссылались, но просто переустановит их. Это полезная команда, например, когда вы меняете целевую структуру вашего проекта. Затем вы можете переустановить те же версии пакетов, и они будут перенацелены на эту версию .NET Framework.

Так что, если nuget restore не работает, то Update-Package -Reinstall, очевидно, тоже не сработает.

С Nuget, когда что-то не работает, вы не должны настаивать, а вместо этого найдите настройку, которая заставит это снова работать. Я не могу сосчитать, сколько раз я обращался к разным кэшам, чтобы удалить некоторые кэшированные пакеты.

Я думаю, вы должны попытаться использовать nuget restore и посмотреть, какие пакеты вызывают проблемы, затем удалить эти пакеты (это просто удалит ссылку из .csproj и packages.config, если они еще не установлены в проекте), затем вы, наконец, можете установить новейшая версия этих пакетов.

person Jérôme MEVEL    schedule 12.10.2018
comment
На самом деле это закончилось вариантом 2. Мне пришлось попросить других сотрудников скопировать мне все пакеты, которые у них есть в их папке /packages, а затем я мог воссоздать состояние, используя локальный канал nuget. Мне по-прежнему требовалось использовать пакеты, к которым у меня не должно быть доступа. Остается вопрос: есть ли способ обновить пакеты, не загружая их текущие версии? - person Doro; 15.10.2018
comment
@ Доро, у меня не хватило символов в простом комментарии, поэтому я отредактировал свой ответ. - person Jérôme MEVEL; 16.10.2018
comment
@Doro, просто для информации, вчера я клонировал один из наших проектов, который ссылался на пакет Nuget, который я действительно переименовал давным-давно, и удалил старый пакет из нашего канала Nuget. Но интерфейс командной строки Nuget выдавал мне ошибку восстановления, когда я пытался Package-Uninstall. Единственным способом было удалить ссылку из файлов .csproj и packages.json. Это немного глупое поведение от Nuget IMO, CLI может просто удалить ссылку и все, вместо того, чтобы возвращать ошибку, но, возможно, для этого есть причина... - person Jérôme MEVEL; 01.11.2018
comment
вот почему я задал этот вопрос :) нет возможности удалять/обновлять пакеты без восстановления версий, указанных в packages.json или .csproj. Это немного странно. К счастью, в моих колледжах были эти старые пакеты локально, поэтому все, что мне нужно было сделать, это скопировать их файлы на свой компьютер и подключить локальный репозиторий nuget. Работал как шарм, но все же - это не то, чего я ожидал от такого огромного и старого менеджера пакетов. - person Doro; 02.11.2018
comment
@Доро, я полностью с тобой согласен - person Jérôme MEVEL; 03.11.2018