Восстановление пакета 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
-
DELETE пакеты папок, если существует
-
Откройте консоль менеджера пакетов, выполните следующую команду
- вставить полный путь nuget.exe RESTORE полный путь .sln файла!
- используйте команду Install-pacakge, если сборка не прошла через какие-либо недостающие ссылки.
Надеюсь, что это поможет (HIH).
Ответ 19
Ни одно из других решений не сработало в моей ситуации:
Зависимости AspNetCore были установлены/удалены и кэшировались. "AspNetCore.All" откажется корректно обновить/переустановить/удалить. И независимо от того, что я делал, он использовал кэшированные зависимости (с которыми он не был совместим), потому что они были более высокой версией.
- Резервное копирование всего. Обратите внимание на список зависимостей, которые вам нужно переустановить, выйдите из VisualStudio
- Откройте все файлы .proj в текстовом редакторе и удалите все
PackageReference
- В каждом проекте удалите папки
bin
, obj
- Удалите все "пакеты" папки, которые вы найдете в решении.
- Откройте решение, перейдите в
Tools > Nuget Package Manager > Package Manager Settings
и Clear all Nuget caches
. Проверьте консоль, поскольку она может не удалить некоторые элементы - скопируйте путь к папке и выйдите из Visual Studio. - Удалите все из этой папки. Откройте решение и снова начните устанавливать пакеты nuget с нуля.
Если это все еще не работает, повторите поиск, но и ваш диск в окне проводника для nuget
и удалите все cachey ищет.
Ответ 20
В VS2017 щелкните правой кнопкой мыши решение => Открыть CommandLine => Командная строка разработчика.
Как только это откроется, введите (и нажмите ввод после)
dotnet restore
Это восстановит все/все пакеты, и вы получите хороший консольный вывод о том, что было сделано...