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

148

Я добавил функцию восстановления пакета nuget в решение, используя «Включить восстановление пакета NuGet»: http://docs.nuget.org/docs/workflows/using-nuget-without-committing-packages

Однако, это сломало мой сервер сборки, и у меня не было времени, чтобы исправить это, поэтому я хотел удалить его. Насколько я знаю, для этого нет никакой возможности, поэтому я удалил следующую строку вручную из всех моих файлов * .csproj:

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

Теперь проблема в том, что каждый раз, когда мои файлы * .csproj извлекаются или открываются мое решение, строка автоматически добавляется снова, ломая мою сборку, если я случайно проверил это :(

Любые идеи, как я могу удалить это навсегда?

ОБНОВЛЕНИЕ: несмотря на ответ ниже, он все еще возвращается при открытии решения, кто-нибудь с такой же проблемой?

Wiebe Tijsma
источник
2
Разве вы не можете просто откатить изменения в Source control?
Бетти
ну, это было довольно большое изменение, но благодаря вашему комментарию я действительно посмотрел, и, кажется, он также добавил папку .nuget в путь решения, удалил ее, чтобы посмотреть,
решит
Вам удалось исправить сервер сборки? (и это teamcity?), потому что строка проекта импорта, которую вы цитируете выше, является причиной сбоя моих сборок teamcity
Baldy
@Baldy Нет, мы используем TFS Build, и я на самом деле не искал решения, просто удалил его (все еще планирую
углубиться
3
Я создал проблему для команды NuGet, чтобы решить эту проблему. Пожалуйста, оцените это на nuget.codeplex.com/workitem/3756
deadlydog

Ответы:

214

Я выглядел не очень хорошо, к файлам проекта добавлено еще одно свойство:

<RestorePackages>true</RestorePackages>

Просто удалите это, а также все эти строки вручную из всех файлов * .csproj:

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

ОБНОВИТЬ:

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

UPDATE2:

Удалите папку .nuget и из корня решения.

Update3:

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

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

Update4

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

<!-- We need to ensure packages are restored prior to assembly resolve -->
<BuildDependsOn Condition="$(RestorePackages) == 'false'">
    RestorePackages;
    $(BuildDependsOn);
</BuildDependsOn>
Wiebe Tijsma
источник
7
Я обнаружил, что <Import Project="$(SolutionDir)\.nuget\nuget.targets" />в конце файла .csproj есть также файл, который необходимо удалить вручную.
TimDog
6
ХА! медленно отступает :)
TimDog
5
Эта вещь мучает и меня. Если ваши проекты имеют много разных решений, функция восстановления пакета вызывает массу проблем.
Дамиан
7
«Убедитесь, что вы закрыли решение», на самом деле здесь имеет ключевое значение, поскольку VS2010, похоже, кэширует файлы csproj / msbuild (без выбора определенных модификаций). Я не заметил такого поведения в VS2012, но это сильно меня мучило при изменении этих файлов в VisualStudio.
Ксавье Декостер
4
Я создал проблему для команды NuGet, чтобы решить эту проблему. Пожалуйста, оцените это на nuget.codeplex.com/workitem/3756
deadlydog
48

Чтобы отключить восстановление пакета Nuget:

  1. Удалить папку .nuget
  2. Удалить определенные строки из всех файлов .csproj

Строки для удаления:

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

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

Это основано на следующей статье: http://bartwullems.blogspot.no/2012/08/disable-nuget-package-restore.html

Кроме того, вы можете дважды проверить, что эта опция отключена: http://docs.nuget.org/docs/workflows/using-nuget-without-committing-packages

angularsen
источник
Я создал проблему для команды NuGet, чтобы решить эту проблему. Пожалуйста, оцените это на nuget.codeplex.com/workitem/3756
deadlydog
1
Спасибо, для меня это было просто отключение
Маартен Кифт
Я с большим успехом использовал инструмент IFix при очистке репозиториев во многих проектах. Это в основном автоматизирует эти шаги. visualstudiogallery.msdn.microsoft.com/...
angularsen
Папка .nuget скрыта, и вам необходимо удалить ее из каталога не только проекта.
Эрик Бергштедт
8

Разве это не здесь?

Параметры ... -> Диспетчер пакетов Nuget -> [снять флажок] Разрешить Nuget загружать недостающие пакеты

введите описание изображения здесь

Я использую Visual Studio Professional + Resharper 8.2

Orad
источник
Я удалил папку пакетов и очистил кеш пакетов, чтобы исправить мою проблему. Спасибо!
Тресто
1
Нет, он не обновляет файлы .proj после - так что проблема возвращается - но хорошо делать это и здесь :-)
schmoopy
Окно вывода показывает это при сборке: Restoring NuGet packages... To prevent NuGet from restoring packages during build, open the Visual Studio Options dialog, click on the Package Manager node and uncheck 'Allow NuGet to download missing packages during build.'это просто подтверждение того, что так и должно быть.
Мусульманин Бен Дхау
1
Это не связано с восстановлением пакета Nuget. В старых версиях VS был пункт контекстного меню для проектов под названием «Включить восстановление пакета Nuget», который создавал бы .nuget/папку и изменял вашу .csprojссылку на .targetsфайл. Вы должны были передать nuget.exeсвою VCS (например, решение проблемы, которую разрешает Nuget!) И тому подобное безобразие. В настоящее время msbuild /restoreсуществует и восстановление встроенного пакета VS. ОП спрашивает, как удалить старый, плохой способ работы, а не как отключить правильную встроенную поддержку восстановления пакетов VS.
Бинки
5

Решения, использующие MSBuild-Integrated для восстановления пакетов, можно перенести в режим автоматического восстановления пакетов. Насколько я понимаю, это должно помочь тем, кто сталкивается с проблемами сборки CI. (Пожалуйста, поправьте меня, если я ошибаюсь).

Обратитесь к документу на веб-сайте Nuget: Миграция интегрированных решений MSBuild для использования автоматического восстановления пакетов по адресу http://docs.nuget.org/docs/workflows/migrating-to-automatic-package-restore.

Там есть информация для конвертации с TFS и без.

Дэвид Эббо также опубликовал некоторую информацию на http://blog.davidebbo.com/2014/01/the-right-way-to-restore-nuget-packages.html

Джеймс Брэдт
источник
3

NuGet имеет сообщение в блоге о переходе на автоматическое восстановление пакетов: http://docs.nuget.org/docs/workflows/migrating-to-automatic-package-restore

В сообщении блога есть ссылка на сценарий powershell , который позаботится об автоматическом (и рекурсивном) удалении необходимых строк : https://github.com/owen2/AutomaticPackageRestoreMigrationScript/blob/master/migrateToAutomaticPackageRestore.ps1

Предложение «Отключить восстановление пакета NuGet» напрямую помечено как «Не исправить»: https://nuget.codeplex.com/workitem/1883.

Нитин Агарвал
источник
2

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

  1. Полностью закройте VS
  2. Обновление <RestorePackages>true</RestorePackages>до <RestorePackages>false</RestorePackages>и удалить <Import Project="$(SolutionDir)\.nuget\nuget.targets" />строку
  3. Также переименован nuget.exeвnuget.exe.NotExe
Дэрил
источник
2

Для тех, кто все еще нуждается в очистке проекта, используя восстановление пакета NuGet старого стиля, инструмент IFix, доступный здесь, автоматизирует процесс.

Просто запустите установщик ( IFixбудет добавлен в PATH) и затем выполните следующее:

IFix nugetrestore --fix

Вы можете запустить его в режиме проверки, чтобы посмотреть, что он будет очищать:

IFix nugetrestore --check
Саймон Фокс
источник
1

Я была такая же проблема. Что я в итоге сделал: 1) Зайдите в каждый файл проекта .csproj в решении, откройте его в блокноте, затем удалите часть XML и сохраните.

2) Затем я удалил все файлы package.config во всем решении.

3) Затем мне пришлось удалить папки .nuget и package.

На данный момент у меня было полностью бесплатное решение NuGet.

4) Затем я вручную сослался на все необходимые библиотеки DLL и нажал кнопку «Компилировать», и решение работало как победитель без необходимости использования пакетов NuGet.

Andy30acre
источник
1

Перейдите в каталог вашего решения, где у вас есть [$(SolutionDir)\.nuget\nuget.targets] .nugetпапка и nuget.targetsфайл, под которым вы удалите папку, и измените удаление строк из вашего csproj в последний раз.

Проблема не вернется, чтобы снова вас обидеть.

Эрвинд
источник
1

Удалите файл packages.config в своем решении.

Задержка
источник
0

Я случайно включил эту опцию «восстановление пакета» при открытии своего проекта в VS2012 RC и начал получать ошибки, которые выглядели примерно так:

"Ошибка 1 Невозможно найти 'C: \ FolderX \ SomeProject.nuget \ nuget.exe'"

Чтобы исправить ошибку, я следовал приведенным выше инструкциям, открыл, открыл каждый файл проекта в блокноте и удалил эту строку RestorePackage.

Дмитрий Лялин
источник
0

Я смог решить эту проблему, приняв следующие меры:

1) убедитесь, что вы делаете резервную копию всех ваших текущих проверенных изменений файлов.

2) физически удалите папку решения из своего C: \ (путь, который сопоставлен с TFS).

3) получить последнюю версию от TFS для вашего решения.

4) скопируйте (если есть) ваши изменения из резервной копии, которую вы сделали на шаге 1.

надеюсь, это поможет !

Раджеш
источник
-2

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

В конце концов, проще было просто скопировать файлы, создать новый проект и импортировать его в решение.

Питер
источник
-8

Nuget отстой. Просто удалите nugets и удалите или закомментируйте элементы пакета из packages.config в корневом каталоге проектов, где это является проблемой. Вместо этого используйте прямые ссылки в какую-нибудь папку lib.

<?xml version="1.0" encoding="utf-8"?>
  <packages>
    <!--<package id="EntityFramework" version="6.0.2" targetFramework="net45" />-->
  </packages>
Игорь Н
источник
Это «отстой», как и любой другой продукт, если вы не знаете, как его использовать и не пытаетесь понять его.
Wiebe Tijsma
Это правда, но, по моему мнению, подталкивание не дает достаточного контроля над вашим проектом. Также графический интерфейс Nuget нуждается в серьезных обновлениях. 1. Он не интуитивно понятен, 2. Труден в управлении пакетом 3. Трудно отключить восстановление 4. Загружает ненужные пакеты 5. Иногда он не может восстановить пакеты
Igor N
Я согласен в некоторой степени, хотя я думаю, что это действительно лучше, чем вообще не иметь менеджера пакетов. Похоже, они работают над серьезными обновлениями графического интерфейса для nuget 3.0: blog.nuget.org/20141112/nuget-3.0-preview.html
Wiebe Tijsma