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

Я проверил проект на одном компьютере, проверил на другом и обнаружил, что двоичные файлы, установленные NuGet, отсутствуют. Я мог бы проверить их и на исходный контроль, но похоже, что есть лучшее решение:

http://docs.nuget.org/docs/workflows/using-nuget-without-committing-packages

Я следил за этими инструкциями, теперь есть папка .nuget, в которой должен быть, есть следующие записи в моем файле .csproj:

<RestorePackages>true</RestorePackages>
<Import Project="$(SolutionDir)\.nuget\nuget.targets" />

но при восстановлении моего решения недостающие пакеты не восстанавливаются.

Что мне не хватает? Как я могу диагностировать эту проблему?

Ответ 1

Обратите внимание, что вы можете принудительно восстановить пакет, выполнив следующие команды в консоли менеджера пакетов nuget

Обновить пакет -Reinstall

Завершает повторную установку всего в решении.


Update-Package -Reinstall -ProjectName myProj

Завершает повторную установку всего в проекте myProj.

Примечание. Это ядерный вариант. При использовании этой команды вы не можете получать одинаковые версии установленных пакетов, и это может привести к возникновению проблем. Это меньше шансов на уровне проекта, а не на уровне решения.

Вы можете использовать параметр параметра -safe для командной строки, чтобы ограничить обновление до более новых версий с помощью того же компонента версии Major и Minor. Этот вариант был добавлен позже и решает некоторые проблемы, упомянутые в комментариях.

Update-Package -Reinstall -Safe

Ответ 2

Для других, кто наткнется на этот пост, прочитайте это.

NuGet 2.7+ представил нам Автоматическое восстановление пакетов. Это считается гораздо лучшим подходом для большинства приложений, поскольку он не влияет на процесс MSBuild. Меньше головных болей.

Некоторые ссылки для запуска:

Ответ 3

Вы включили режим восстановления пакетов в проекте, в котором отсутствуют недостающие пакеты/двоичные файлы? Существует известная проблема, которая требует правильной установки пакетов при включении режима восстановления:

http://nuget.codeplex.com/workitem/1879


Исходная ссылка не работает; это может быть заменой: https://github.com/NuGet/Home/issues/1968

Ответ 4

Вам нужно выбрать один из следующих способов:

Повторная установка пакета по имени во всех проектах решения:

Update-Package –reinstall <packageName>

Повторная установка пакета по его имени и игнорирование его зависимостей во всех проектах решений:

Update-Package –reinstall <packageName> -ignoreDependencies

Повторная установка пакета по его имени в проекте:

Update-Package –reinstall <packageName> <projectName>

Повторная установка всех пакетов в конкретном проекте:

Update-Package -reinstall -ProjectName <projectName>

Повторная установка всех пакетов в решении:

Update-Package -reinstall 

Ответ 5

Я столкнулся с этой проблемой в двух сценариях.

Во-первых, когда я пытаюсь построить свое решение из командной строки, используя msbuild.exe. Во-вторых, когда я пытаюсь построить sln и содержащие проекты на моем сервере сборки, используя TFS и CI.

Я получаю ошибки, утверждая, что ссылки отсутствуют. При проверке как моего локального каталога сборки, так и сервера TFS я вижу, что папка /packages не создана, а пакеты nuget не копируются. Следуя инструкциям, перечисленным в ответе Александра, http://nuget.codeplex.com/workitem/1879 также не работал у меня.

Я включил восстановление пакетов через VS2010, и я видел, что сборки работают только с VS2010. Опять же, использование msbuild не работает. Мое обходное решение, вероятно, полностью недействительно, но для моей среды это все работает из локальной сборки командной строки, а также из сборки CI в TFS.

Я зашел в. \nuget и изменил эту строку в файле .nuget\NuGet.targets:

от

<RestoreCommand>$(NuGetCommand) install "$(PackagesConfig)" -source "$(PackageSources)" -o "$(PackagesDir)"</RestoreCommand>

to: (обратите внимание, без кавычек вокруг переменных)

<RestoreCommand>$(NuGetCommand) install $(PackagesConfig) -source $(PackageSources) -o $(PackagesDir)</RestoreCommand>

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

Я скажу, что включение журнала диагностики в вашей сборке поможет показать, какие команды выполняются с помощью msbuild. Это привело меня к временному взлому файла целей.

Ответ 6

VS 2017

Инструменты > Диспетчер пакетов NuGet > Настройки диспетчера пакетов > Общие Нажмите "Очистить все кеши NuGet"

Ответ 7

Если что-то еще не работает, попробуйте:

  • Закрыть проект.
  • Удалить папку пакетов в папке решения.
  • Снова открыть проект и снова восстановить пакеты Nugget.

Работал для меня, и это легко попробовать.

Ответ 8

Просто для других, которые могут столкнуться с этой проблемой, я смог решить проблему, закрыв Visual Studio и вновь открыв проект. Когда проект был загружен, пакеты были восстановлены во время фазы инициализации.

Ответ 9

Если ни один из других ответов не работает для вас, попробуйте следующее, что было единственным, что сработало для меня:

Найдите файл .csproj и отредактируйте его в текстовом редакторе.

Найдите тег <Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild"> в вашем файле .csproj и удалите весь блок.

Переустановите все пакеты в решении:

Update-Package -reinstall

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

Ответ 10

Для меня у меня был пустой тег NuGetPackageImportStamp в .csproj

<NuGetPackageImportStamp>
    </NuGetPackageImportStamp>

В идеале он должен содержать некоторый действительный идентификатор GUID.

Удаление вышеупомянутого тега, а затем "Restore Nugets" сработало для меня.

Ответ 11

Иногда случается что-то странное и использование Visual Studio для автоматического восстановления не работает. В этом случае вы можете использовать консоль диспетчера пакетов NuGet. Это открывается в Visual Studio из Инструменты → Диспетчер пакетов NuGet → Консоль диспетчера пакетов. Команды в консоли просты. И чтобы получить контекстную информацию при вводе команды, просто нажмите кнопку, и она даст вам все варианты, которые начинаются с букв, которые вы вводите. Поэтому, если пакет не установлен, например log4net, введите следующую команду:

Установочный пакет log4net

Вы можете сделать намного больше, например, указать версию для установки, обновить пакет, удалить пакет и т.д.

Мне пришлось использовать консоль, чтобы помочь мне, когда Visual Studio действовала как чудовище.

Ответ 12

Автоматическое восстановление пакетов не будет выполнено по одной из следующих причин:

  • Вы не удалили файлы NuGet.exe и NuGet.targets из папки .nuget решения (которое можно найти в корневой папке вашего решения)
  • Вы не включили автоматическое восстановление пакета из Инструменты → Параметры → Диспетчер пакетов Nuget → Общие настройки.
  • Вы забыли вручную удалить ссылки во всех своих проектах в файл Nuget.targets.
  • Вам необходимо перезапустить Visual Studio (убедитесь, что процесс был удален из диспетчера задач перед запуском снова).

В следующей статье более подробно описано, как идти о точках 1-3: https://docs.nuget.org/consume/package-restore/migrating-to-automatic-package-restore

Ответ 13

У меня были пакеты NuGet, которые ломались после того, как я восстановил систему в своей системе, поддерживая ее примерно на два дня. (В то же время были установлены пакеты NuGet.) Чтобы исправить это, мне пришлось перейти в папку .nuget\packages в моем профиле пользователя, найти пакеты и удалить их. Только тогда Visual Studio вытащит пакеты свежими и правильно добавит их в качестве ссылок.

Ответ 14

Лучшее обходное решение, которое я нашел, создавая новый Проект с нуля, затем импортируйте все исходные файлы с кодом. Мой проект был не таким сложным, поэтому у меня не было проблем.

Ответ 15

vs2015 не разрешить проблему восстановления nuget. Мое решение:

  • добавить папку .nuget, добавить файл NuGet.Config и NuGet.targets в каталог .nuget

  • каждый файл проекта добавляет: построить

  <RestorePackages>true</RestorePackages>

  <Import Project="$(SolutionDir)\.nuget\NuGet.targets" Condition="Exists('$(SolutionDir)\.nuget\NuGet.targets')" />
  <Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
    <PropertyGroup>
      <ErrorText>This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them.  For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText>
    </PropertyGroup>
    <Error Condition="!Exists('$(SolutionDir)\.nuget\NuGet.targets')" Text="$([System.String]::Format('$(ErrorText)', '$(SolutionDir)\.nuget\NuGet.targets'))" />
  </Target>

Ответ 16

Если ошибка, с которой вы сталкиваетесь, "не может подключиться к удаленному серверу", как и моя, тогда вам также будет полезной эта проверка, помимо проверок, указанных в приведенных выше комментариях.

Я видел, что было 2 NUGET Package Sources, из которых можно было загрузить пакеты (в Tools- > Nuget Package Manager- > Settings Manager Packager). Один из источников пакета не работал, и Nuget пытался загрузить только из этого источника.

Вещи упали на место после того, как я изменил исходный код для загрузки с: https://www.nuget.org/api/v2/ EXPLICTLY в настройках

Ответ 17

В моем случае прерванная попытка восстановления Nuget испортила один из файлов packages.config в решении. Я не обнаружил этого, прежде чем проверять рабочее дерево git. После восстановления изменений в файле восстановление Nuget снова работало.

Ответ 18

Существует ярлык для восстановления работы Nuget, 1. Убедитесь, что подключение к Интернету или URL-адреса Nuget являются правильными в меню опций VS Tools 2. Посмотрите на .nuget или nuget папку в решении, else - скопируйте с любого, чтобы получить nuget.exe

  1. DELETE пакеты папок, если существует

  2. Откройте консоль менеджера пакетов, выполните следующую команду

    • вставить полный путь nuget.exe RESTORE полный путь .sln файла!
  3. используйте команду Install-pacakge, если сборка не прошла через какие-либо недостающие ссылки. Надеюсь, что это поможет (HIH).

Ответ 19

Ни одно из других решений не сработало в моей ситуации:

Зависимости AspNetCore были установлены/удалены и кэшировались. "AspNetCore.All" откажется корректно обновить/переустановить/удалить. И независимо от того, что я делал, он использовал кэшированные зависимости (с которыми он не был совместим), потому что они были более высокой версией.

  1. Резервное копирование всего. Обратите внимание на список зависимостей, которые вам нужно переустановить, выйдите из VisualStudio
  2. Откройте все файлы .proj в текстовом редакторе и удалите все PackageReference
  3. В каждом проекте удалите папки bin, obj
  4. Удалите все "пакеты" папки, которые вы найдете в решении.
  5. Откройте решение, перейдите в Tools > Nuget Package Manager > Package Manager Settings и Clear all Nuget caches. Проверьте консоль, поскольку она может не удалить некоторые элементы - скопируйте путь к папке и выйдите из Visual Studio.
  6. Удалите все из этой папки. Откройте решение и снова начните устанавливать пакеты nuget с нуля.

Если это все еще не работает, повторите поиск, но и ваш диск в окне проводника для nuget и удалите все cachey ищет.

Ответ 20

В VS2017 щелкните правой кнопкой мыши решение => Открыть CommandLine => Командная строка разработчика.

Как только это откроется, введите (и нажмите ввод после)

dotnet restore

Это восстановит все/все пакеты, и вы получите хороший консольный вывод о том, что было сделано...