Відновлення пакету NuGet не працює


165

Я перевірив проект на одному комп’ютері, перевірив на іншому і виявив, що бінарні файли, встановлені NuGet, відсутні. Я можу перевірити їх і для контролю джерела, але, схоже, є краще рішення:

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

Я дотримувався цих вказівок, тепер у .nugetпапці має бути папка, в якій є .csproj:

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

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

Що я пропускаю? Як можна діагностувати цю проблему?


Чи бачите ви, що nuget.exe спрацьовує у вихідному журналі?
Пранів

І що важливо: чи ви бачите якісь помилки в журналі виводу?
maartenba

Відповіді:


272

Зауважте, що ви можете змусити відновлення пакета виконати, виконавши наступні команди в консолі адміністратора пакетів

Update-Package - перевстановити

Змушує перевстановити все в рішення.


Update-Package -Reinstall -ProjectName myProj

Примушує перевстановити все в проект myProj.

Примітка . Це ядерний варіант. Під час використання цієї команди ви не можете отримувати ті самі версії встановлених пакунків, що може призвести до проблем. Це рідше трапляється на рівні проекту на відміну від рівня рішення.

Ви можете використовувати -safeпараметр командного рядка для обмеження оновлень до новіших версій із тим самим компонентом «Основна» та «Малий». Цей варіант був доданий пізніше і вирішує деякі питання, згадані в коментарях.

Оновлення-пакет-перевстановлення-безпечний


7
@ NightOwl888 це звучить як щось, про що потрібно повідомити, так як не повинно це робити, якщо, можливо, у вас завжди були проблеми з прив'язкою пекла DLL і, на щастя, він працював, але перевстановлення це закінчило вашу удачу з цим працювати.
Кріс Марісіч

4
@nightowl, якщо ви використовуєте керування джерелом, це не повинно бути важким, щоб стримувати зміни.
ЕрікЕ

4
Основний недолік тут полягає в тому, що версії пакету не підтримуються, тому буде встановлена ​​остання версія пакета. Це може бути проблемою, якщо ваш проект не сумісний з новою версією ..
JDandChips

4
Так, для мене працював Update-Package -Reinstall. Я поняття не маю, чому IDE просто не робить цього. Все встановлено правильно. Клянусь, я клянусь, NuGet є і хорошим, і дратівливим.
Джеремі Рей Браун

2
приємно, що ви додали "важливо! Це може зруйнувати ваш проект" на БОТОМ вашої відповіді!
devman

25

Для інших, хто натрапляє на цю публікацію, читайте це.

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

Деякі посилання для початку роботи:


2
Дякуємо за відповідь, що відповідає поточній версії NuGet.
Ерік Дж

20

Ви повинні вибрати один із наступних способів:

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

Update-Package –reinstall <packageName>

Перевстановлення пакета за назвою та ігнорування його залежностей у всіх проектах рішення:

Update-Package –reinstall <packageName> -ignoreDependencies

Повторна інсталяція пакета за його ім'ям у проекті:

Update-Package –reinstall <packageName> <projectName>

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

Update-Package -reinstall -ProjectName <projectName>

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

Update-Package -reinstall 

Вирішив мою проблему швидко-брудний стиль.
чорнорхіда

20

Чи ввімкнено режим відновлення пакунків у проекті, у якому відсутні відсутні пакети / двійкові файли? Існує відома проблема, що вимагає, щоб пакети були правильно встановлені при включенні режиму відновлення:

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


Оригінальна посилання мертва; це може бути заміною: https://github.com/NuGet/Home/isissue/1968


3
Дякуємо за посилання Увімкнути режим відновлення пакунків у проекті, у якому відсутні пакети / двійкові файли, буде загальним випадком. Якщо у вас немає пакетів, саме тоді ви хочете їх отримати. Невдача використання.
Ентоні

2
Коли ви говорите "включити режим відновлення пакунків у проекті, у якому відсутні пакети", що ви маєте на увазі? Чи є команда консолі, яку мені потрібно виконати для цього?
CodeWarrior

90
NuGet мене щодня відмовляє, я вкрай зневажаю це.
Джаммер

14

VS 2017

Інструменти> NuGet Package Manager> Налаштування диспетчера пакунків> Загальні Клацніть на "Очистити всі кеш-файли NuGet"


Під час перевірки рішення з вихідного контролю (керованого за допомогою програми Visual Studio Team Explorer з DevOps / Git) збірки були неможливі через відсутніх посилань, а пакети відновлення не зробили нічого. Це рішення було правильним для цієї обставини.
PJRobot

12

Я зіткнувся з цією проблемою у двох сценаріях.

По-перше, коли я намагаюся створити своє рішення з командного рядка за допомогою msbuild.exe. По-друге, коли я намагаюся створити sln та містять проекти на своєму сервері збірки за допомогою TFS та CI.

Я отримую помилки, стверджуючи, що посилання відсутні. Під час огляду як мого локального каталогу збірки, так і сервера TFS я бачу, що папка / пакети не створена, а пакунки нугів не копіюються. Дотримуючись інструкцій, наведених у відповіді Олександра 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. Це мене призвело до тимчасового злому файлу цілей.


У мене виникли проблеми з подвійними цитатами, і я повинен був зробити те саме редагування, що і ви. Дуже засмучує!
Грег

5

Якщо нічого іншого не вийшло, спробуйте:

  1. Закрити проект.
  2. Видаліть папку пакунків у папці рішення.
  3. Відкрийте проект ще раз і відновіть пакунки Nugget знову.

Працював для мене, і це легко спробувати.


2
Це працювало для мене. На кроці 3 мені не довелося відновлювати пакунки вручну - вони відновлювалися автоматично, коли я відкривав проект.
Tawab Wakil

5

Якщо жоден з інших відповідей не працює для вас, то спробуйте наступне, що було для мене єдиним:

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

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

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

Update-Package -reinstall

Після цього ваші назви пакунків повинні бути відновлені, я думаю, це може бути бахрома, яка виникає лише при переміщенні проекту в інше місце.


Це врятувало мене від того, щоб піти зовсім нахабно. Дякую!
Джефф Хей

4

Тільки для інших, хто може зіткнутися з цією проблемою, я зміг вирішити проблему, закривши Visual Studio і знову відкривши проект. Після завантаження проекту пакети були відновлені під час фази ініціалізації.


4

Для мене у мене був порожній тег NuGetPackageImportStamp в .csproj

<NuGetPackageImportStamp>
    </NuGetPackageImportStamp>

В ідеалі він повинен містити дійсний GUID.

Видалення вищевказаного тегу, а потім "Відновлення нугетів" працювало для мене.


1

Іноді трапляється щось дивне, і використання Visual Studio для автоматичного відновлення не працює. У такому випадку ви можете використовувати консоль менеджера пакунків NuGet. Відкривається в Visual Studio за допомогою інструментів -> NuGet Package Manager -> Console Package Manager . Команди в консолі прості. І щоб отримати контекстну допомогу під час введення команди, просто натисніть кнопку, і вона дасть вам усі варіанти, які починаються з літер, які ви вводите. Отже, якщо пакет не встановлений, наприклад log4net, введіть таку команду:

Install-Package log4net

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

Мені довелося скористатися консоллю, щоб допомогти мені, коли Visual Studio діяв як дивак.


1

Автоматичне відновлення пакета не вдасться з будь-якої з наступних причин:

  1. Ви не видалили файли NuGet.exe і NuGet.targets із папки .nuget рішення (яку можна знайти в кореневій папці рішення)
  2. Ви не ввімкнули автоматичне відновлення пакунків із Інструментів >> Параметри >> Nuget Package Manager >> Загальні налаштування.
  3. Ви забули вручну видалити посилання у всіх своїх проектах на файл Nuget.targets
  4. Вам потрібно перезапустити Visual Studio (переконайтеся, що процес загинув від вашого менеджера завдань, перш ніж запускатись знову).

У наступній статті більш докладно викладено питання щодо досягнення пунктів 1-3: https://docs.nuget.org/consume/package-restore/migrating-to-automatic-package-restore


1
Стосовно вашого пункту №1, надане вами посилання суперечить вашим порадам: "Якщо ви використовуєте TFS 1. Видаліть файли NuGet.exe і NuGet.targets із папки .nuget рішення 2. Зберігайте файл NuGet.Config, щоб продовжувати обхід. додавання пакетів до керування джерелом. "
Ендрю Деннісон

1

У мене було зламано пакунки NuGet після того, як я відновив систему на своїй системі, створивши резервну копію приблизно два дні. (Пакети NuGet були встановлені тим часом.) Щоб виправити це, мені довелося зайти в папку .nuget \ пакети в моєму профілі користувача, знайти пакунки та видалити їх. Лише тоді Visual Studio витягнув би пакети свіжими та належним чином додав їх у якості посилань.


1

Найкраще вирішити те, що я знайшов створення нового Project з нуля, а потім імпортував усі вихідні файли з кодом. Мій проект був не таким складним, щоб у мене звідти не було проблем.


1

Жодне з інших рішень не працювало в моїй ситуації:

Залежності AspNetCore були встановлені / видалені та кешовані. 'AspNetCore.All' відмовиться належним чином оновити / перевстановити / видалити. І незалежно від того, що я робив, він використовував кешовані залежності (щоб це не було сумісним), оскільки вони були вищою версією.

  1. Резервне копіювання всього. Зверніть увагу на список залежностей, які вам знадобиться перевстановити, Exit VisualStudio
  2. Відкрийте всі .proj файли в текстовому редакторі та видаліть усі PackageReference
  3. У кожному проекті, видаляти bin, objпапки
  4. Видаліть усі папки "пакунків", які ви знайдете в рішенні.
  5. Відкрийте рішення, увійдіть у Tools > Nuget Package Manager > Package Manager Settingsта Clear all Nuget caches. Перевірте консоль, оскільки можливо не вдасться видалити деякі елементи - скопіюйте шлях до папки та вийдіть із візуальної студії.
  6. Видаліть що-небудь із цієї папки. Відкрийте рішення. Відкрийте рішення і почніть інсталювати нульові пакети знову з нуля.

Якщо це все ще не працює, повторіть, але також пошукайте свій диск у Windows Explorer nugetі видаліть все, що шукає кеш.


0

vs2015 не ввімкнути проблеми відновлення нута Моє рішення:

  1. додати папку .nuget, додати файл NuGet.Config та NuGet.targets у каталог .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>

Це старий спосіб зробити це. Дивіться відповідь @davenewza та його посилання на blog.davidebbo.com/2014/01/…
timB33

0

Якщо помилка, з якою ви стикаєтесь, «не в змозі підключитися до віддаленого сервера», як це було у мене, тоді ви також отримаєте користь, щоб ви також отримали цю перевірку на додаток до перевірок, передбачених у вищезазначених коментарях.

Я помітив, що є 2 джерела пакунків NUGET, з яких можна було завантажувати пакунки (в межах Інструменти-> Nuget Package Manager-> Settings Packager Manager). Один з джерел пакета не працював, і Nuget намагався завантажити тільки з цього джерела.

Речі стали на свої місця, як тільки я змінив джерело пакета для завантаження з: https://www.nuget.org/api/v2/ ЕКСПЛІАТНО в налаштуваннях


0

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


0

Існує ярлик, щоб зробити Nuget відновлення роботи, 1. Переконайтесь, що підключення до Інтернету або Nuget URL належними в меню параметрів інструментів VS 2. Подивіться папку .nuget або nuget у рішенні, інше - скопіюйте з будь-якої сторінки, щоб отримати nuget.exe

  1. Зняти папки, якщо такі є

  2. Відкрийте консоль менеджера пакунків, виконайте цю команду

    • вставити повний шлях nuget.exe ВІДНОВИТИ повний шлях .sln файлу!
  3. використовуйте команду Install-pacakge, якщо збірка не пройшла жодних відсутніх посилань. Сподіваюся, що це допомагає (ВІГ)

0

У VS2017 клацніть правою кнопкою миші на рішення => Відкрити CommandLine => Командний рядок розробника.

Як тільки це відкриється, введіть (і натисніть Enter після)

dotnet restore

Це відновить будь-які / всі пакунки, і ви отримаєте хороший консольний вихід із того, що було зроблено ...

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.