Восстановление пакета NuGet не работает - PullRequest
151 голосов
/ 26 января 2012

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

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

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

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

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

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

Ответы [ 20 ]

250 голосов
/ 21 мая 2013

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

Update-Package -Reinstall

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


Пакет обновлений -Reinstall -ProjectName myProj

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

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

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

Update-Package -Reinstall -Safe

24 голосов
/ 28 мая 2014

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

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

Некоторые ссылки для начала работы:

20 голосов
/ 23 марта 2012

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

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


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

19 голосов
/ 11 сентября 2014

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

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

Update-Package –reinstall <packageName>

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

Update-Package –reinstall <packageName> -ignoreDependencies

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

Update-Package –reinstall <packageName> <projectName>

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

Update-Package -reinstall -ProjectName <projectName>

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

Update-Package -reinstall 
12 голосов
/ 12 июля 2012

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

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

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

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

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

с:

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

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

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

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

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

11 голосов
/ 27 марта 2017

VS 2017

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

5 голосов
/ 02 июля 2017

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

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

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

3 голосов
/ 22 ноября 2017

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

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

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

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

Update-Package -reinstall

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

3 голосов
/ 04 июня 2018

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

<NuGetPackageImportStamp>
    </NuGetPackageImportStamp>

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

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

3 голосов
/ 20 января 2014

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...