Как удалить пакеты NuGet, на которые не ссылается ни один проект в моем решении?

142

Каким-то образом во время обновления до VS2012 и .NET 4.5 мне удалось запутать NuGet. В диспетчере пакетов (и в папке пакетов) есть пакеты, которые я не могу удалить (я считаю, что это устаревшие пакеты NuGet ASP.NET, которые были заменены новыми именами пакетов в новой версии. У каждого из них есть только кнопка управления - но нет кнопки удаления. И когда вы посмотрите, где они используются, вы увидите, что на них не ссылается ни один из проектов решения? Они НЕ отображают удаление?

Говард Пинсли
источник

Ответы:

107

Вы можете использовать консоль диспетчера пакетов с командой: Uninstall-Package PackageIdудалить его или просто удалить папку пакета из папки «пакеты» в папке решения. Дополнительную информацию о консоли диспетчера пакетов можно найти здесь: http://docs.nuget.org/docs/reference/package-manager-console-powershell-reference

Павел Бакший
источник
9
Спасибо, Павел. У меня было ощущение, что вы можете просто удалить папки. Это немного сбивает с толку, потому что я должен вручную убедиться, что ни один из пакетов не упоминается (кажется, что это не так). Мне все еще любопытно узнать, почему в диспетчере пакетов не отображается кнопка Удалить (или удалить).
Ховард Пинсли,
2
Диспетчер пакетов на уровне решения отображает все ссылки пакетов на проекты из решения и дополнительные все пакеты, которые помещены в папку пакетов, но не упоминаются. Для этого пакета нет возможности удаления в пользовательском интерфейсе. Я согласен, что это результат некорректного поведения, но в этом случае вам следует проверить это вручную. И удалите пакет или переустановите его, когда вы будете уверены, что он вам нужен или нет.
Павел Бакши
1
Просто удалив папку и вернувшись в NuGet и увидев пакет, он каким-то образом по-прежнему отображается как установленный с зеленой галочкой рядом с ним, лучше выполнить правильное удаление с помощью консоли.
k80sg
1
@ysrb, это команда powershell, в которой используется глагол-существительное, такое как get-user или remove-item, ваш пример - существительное-глагол
Ник Янг,
1
@ysrb Как говорит Ник Янг, и, кроме того, это был бы ужасный комплимент Install-Package.
ProfK 04
160

Я нашел обходной путь для этого.

  1. Включить восстановление пакета и автоматическую проверку (Параметры / Диспетчер пакетов / Общие)
  2. Удалите все содержимое папки пакетов (в корзину, если нервничаете!)
  3. Управление пакетами Nuget для решения
  4. Нажмите кнопку восстановления.

NuGet восстановит только пакеты, используемые в вашем решении. В итоге вы получите красивый, оптимизированный набор пакетов.

Джеймс Л
источник
1
Не будет ли это не удалить пакет из packages.configи не удалить ссылки из проекта?
CodeCaster 07
1
@CodeCaster сложно разобрать ваш двойной негатив. Ничего не будет удалено из конфига и ссылок. Идея состоит в том, чтобы удалить пакеты NuGet, на которые больше не ссылаются,
Джеймс Л.
1
Отличный ответ! Если вы используете TFS, вы должны сначала удалить все содержимое внутри ./packages в исходном countrol explorer, чтобы другие клиенты, такие как машины сборки, также удаляли избыточные элементы.
Александр Шмидт
4
@ sprinter252, если вы используете восстановление пакетов, вы не должны в первую очередь проверять пакеты в системе контроля версий. Это одно из основных преимуществ использования восстановления пакетов. В рамках преобразования в восстановление пакетов в папку пакетов следует поместить правило игнорирования.
Карл Буссема
@CarlBussema Вы правы. Начиная с новой версии NuGet, это не так важно, потому что Nuget не будет добавлять двоичные файлы во вложенные папки. Итак, вы получаете только структуру папок. Мой комментарий был связан с поведением TFS по умолчанию (включая папку пакетов). В TFS Anywhere игнорирование часто игнорируется ;-). Важно для смешанных проектов с Xamarin.
Александр Шмидт
17

Сначала откройте консоль диспетчера пакетов. Затем выберите свой проект из раскрывающегося списка. И выполните следующие команды для удаления пакетов nuget.

Get-Package

для получения всего установленного вами пакета.

а потом

Uninstall-Package PagedList.Mvc

--- для удаления пакета с именем PagedList.MVC

Сообщение

PM> Uninstall-Package PagedList.Mvc
Successfully removed 'PagedList.Mvc 4.5.0.0' from MCEMRBPP.PIR.
Абдус Салам Азад
источник
Этот ответ отлично сработал для меня. Моя ситуация заключалась в том, что пакет отображался только на вкладке «Обновления» диалогового окна ... и когда я нажимал «Обновить», ни в одном из проектов пакет не был установлен, поэтому не было возможности обновить или удалить его.
azarc3
8

Если вы хотите удалить / удалить пакет Nuget, который применяется к нескольким проектам в ваших решениях, перейдите по ссылке :

  1. Инструменты-> Диспетчер пакетов Nuget -> Управление пакетами Nuget для решения

  2. В левом столбце, где находится «Установленные пакеты», выберите «Все», чтобы вы увидели список установленных пакетов и кнопку «Управление» напротив них.

  3. Нажмите кнопку «Управление», и вы увидите всплывающее окно, снимите флажок напротив имени проекта и нажмите «ОК».

Остальную работу менеджер пакетов сделает за вас.


источник
1
Это определенно ответ, который я искал, спасибо!
Sal
3

Если вы удалили пакет с помощью утилиты Uninstall-Package и удалили нужный пакет из каталога пакетов под решением (и вы по-прежнему получаете ошибку), просто откройте файл * .csproj в редакторе кода и удалите тег вручную. Например, я хотел избавиться от пакета Nuget Xamarin.Forms.Alias и удалил эти строки из файла * .csproj.

Удаление пакета nuget из скрипта msbuild

И, наконец, не забудьте перезагрузить проект после того, как появится запрос в Visual Studio (после изменения файла проекта). Я пробовал его в Visual Studio 2015, но он должен работать и в Visual Studio 2010 и новее.

Надеюсь это поможет.

AB
источник
2

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

Здесь необходим подходящий деинсталлятор.

Д.Росадо
источник
Есть ли способ заставить его правильно удалить, не переустанавливая его?
Нокс
2

Решение 1

Используйте конвейер powershell, чтобы получать пакеты и удалять их одним оператором, подобным этому

Get-Package | Uninstall-Package

Решение 2

если вы хотите удалить выбранные пакеты, выполните следующие действия.

  1. Используйте GetPackagesдля получения списка пакетов
  2. Загрузите программное обеспечение Nimble text
  3. Скопируйте вывод GetPackagesв NimbleText (для каждой строки в окне списка)
  4. Установите колонки Seperator в (случае необходимости
  5. Тип Uninstall-Package $0(замена с использованием окна шаблона)
  6. Скопируйте результаты и вставьте их в Консоль управления пакетами.

Это все, ребята.

Ирфандар
источник
1

Один пакет NuGet может ссылаться на другой пакет NuGet. Поэтому будьте очень осторожны с зависимостями между пакетами. Я только что удалил пакет карты Google, и он впоследствии удалил базовые пакеты, такие как Newtonsoft, Entity Framework и т. Д.

Таким образом, будет безопаснее вручную удалить конкретный пакет из папки пакетов.

Аки
источник
1

Из окна консоли диспетчера пакетов часто любую команду, которую вы использовали для установки пакета, можно использовать для удаления этого пакета. Просто замените команду INSTALL на UNINSTALL .

Например, чтобы установить PowerTCPTelnet, используйте следующую команду:

Install-Package PowerTCPTelnet -Version 4.4.9

Чтобы удалить то же самое, команда:

Uninstall-Package PowerTCPTelnet -Version 4.4.9

Джазимов
источник
1

VS2019> Инструменты> Параметры> Диспетчер пакетов Nuget> Общие> Нажмите «Очистить все кеши Nuger»

Харрис
источник
-2

Другой способ и самый простой для меня:

  1. Зайдите в свой Soution и щелкните по нему правой кнопкой мыши.

  2. Выберите вариант «Пакеты управляемых NUgets для решения». Чтобы открыть всплывающее окно, нажмите кнопку «Настройки». Это откроет другое всплывающее окно, а затем выполните поиск: «Диспетчер пакетов».

  3. Внутри опции «Менеджер пакетов» у вас есть еще две опции (I. Общие II. Источники пакетов) В каждой опции снимите все флажки.

Эти шаги деактивируют NuGet из вашего проекта.

Я надеюсь, что тебе действительно поможет.

Амедривроперес
источник
-2

Если вы хотите использовать опцию Visual Studio, см. Ссылку ниже

http://spvenky.wordpress.com/2014/08/10/how-to-remove-nuget-packages-from-existing-visual-studio-solution/

Шаг 1. В Visual Studio перейдите в Инструменты / Диспетчер пакетов NuGet / Управление пакетами NuGet для решения…

Шаг 2. Снимите отметку с вашего проекта (ов) с текущего решения

Шаг 3: Снимите выделение с проектов и нажмите ОК.

user1214835
источник
2
Желательно записать ответ в StackOverflow, а не просто размещать ссылку на него, потому что в будущем ссылки могут истечь.
Амадеус Санчес,