Восстановление Пакета NuGet Не Работает

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

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

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

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

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

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

19 ответов


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

Update-Package-Переустановить

заставляет переустановить все в решении.


Update-Package-Reinstall-ProjectName myProj

заставляет переустановить все в проекте myProj.

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

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

Update-Package-Reinstall-Safe


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

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

некоторые ссылки, чтобы вы начали:


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

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


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

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

Update-Package –reinstall <packageName>

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

Update-Package –reinstall <packageName> -ignoreDependencies

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

Update-Package –reinstall <packageName> <projectName>

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

Update-Package -reinstall -ProjectName <projectName>

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

Update-Package -reinstall 

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

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

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

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

Я вошел .\nuget и изменил это очередь .из NuGet\NuGet для.файл целей:

from:

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

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

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

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

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


VS 2017

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


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


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

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

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

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

Update-Package -reinstall

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


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

  1. Закрыть Проект.
  2. удалить папку пакетов в папке решения.
  3. снова откройте проект и снова восстановите пакеты Nugget.

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


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

установить-пакет log4net

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

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


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

  1. вы не удалили NuGet.exe и NuGet.целевые файлы из решения .папка nuget (которую можно найти в корневой папке решения)
  2. вы не включили автоматическое восстановление пакетов из инструментов > > параметры > > Диспетчер пакетов Nuget > > Общие настройки.
  3. вы забыли вручную удалить ссылки во всех ваших проектах на Nuget.цели файл
  4. необходимо перезапустить Visual Studio (убедитесь, что процесс убит из Диспетчера задач перед запуском снова).

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


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


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


Я имел пустой тег NuGetPackageImportStamp в .csproj файл

<NuGetPackageImportStamp>
    </NuGetPackageImportStamp>

в идеале он должен содержать некоторый допустимый GUID.

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


vs2015 нет проблемы с восстановлением nuget. Мое решение:

  1. добавить папку .NuGet, то добавить NuGet для файла.Config и NuGet.цели в каталоге .из NuGet

  2. каждый файл проекта добавить: build

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

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

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

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


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


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

  1. удалить папки пакетов, если существует

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

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

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

зависимости 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 студия.
  6. удалить все из этой папки откройте решение и начать установки NuGet для пакеты снова с нуля.

если это все еще не работает, повторите, но также найдите свой диск в проводнике windows для nuget и удалите все, что ищет cachey.