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


148

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

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

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

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

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

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


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>

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


Я создал проблему для команды NuGet, чтобы решить эту проблему. Пожалуйста, оцените это на nuget.codeplex.com/workitem/3756
deadlydog

1
Спасибо, для меня это было просто отключение
Маартен Кифт

Я с большим успехом использовал инструмент IFix при очистке репозиториев во многих проектах. Это в основном автоматизирует эти шаги. visualstudiogallery.msdn.microsoft.com/...
angularsen

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

8

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

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

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

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


Я удалил папку пакетов и очистил кеш пакетов, чтобы исправить мою проблему. Спасибо!
Тресто

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.


1

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

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



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
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.