Як видалити пакети NuGet, на які не посилається жоден проект у моєму рішенні?


141

Якось під час оновлення до VS2012 та .NET 4.5 мені вдалося заплутатися в NuGet. У диспетчері пакунків (і в папці пакунків) з'являються пакунки, які я не можу видалити (я вважаю, що вони є застарілими пакетами ASP.NET NuGet, які були замінені новими іменами пакетів з новою версією. У кожному з них є лише кнопка Керування - але немає кнопки видалення. Коли ви подивитесь, де вони використовуються, ви побачите, що на них не посилається жоден з проектів рішення? Вони НЕ відображають Видалити?

Відповіді:


108

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


8
Спасибі Павло. У мене було відчуття, що ти можеш просто видалити папки. Це трохи неприємно, тому що я повинен вручну переконатися, що жоден з пакунків не посилається на них (вони, здається, не є). Мені все ще цікаво дізнатися, чому менеджер пакунків не показує кнопку "Видалити (або видалити)".
Говард Пінслі

2
Менеджер пакунків на рівні рішення відображає всі посилання пакетів на проекти з рішення та додаткові всі пакети, які розміщені в папці пакунків, але не посилаються на них. Для цих пакунків немає можливості видалення інтерфейсу користувача. Я згоден, що це результат неправильної поведінки, але в цьому випадку ви повинні перевірити це вручну. І видаліть пакет або перевстановіть його тоді, коли ви будете впевнені, потрібен він вам чи ні.
Павло Бакши

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

1
@ysrb, команда powershell, яка має іменник дієслова, наприклад get-user або remove-item, ваш приклад - іменник-дієслово
Nick Young

1
@ysrb Як каже Нік Янг, і до того ж це був би жахливий комплімент Install-Package.
ПрофК

159

Я знайшов вирішення цього питання.

  1. Увімкнути відновлення пакета та автоматичну перевірку (Параметри / Менеджер пакунків / Загальне)
  2. Видаліть весь вміст папки пакунків (до кошика, якщо ви нервуєте!)
  3. Керуйте Nuget пакетами для вирішення
  4. Натисніть кнопку відновлення.

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


1
Хіба це не видалить пакет packages.configі не видалить посилання з проекту?
CodeCaster

1
@CodeCaster важко проаналізувати подвійний мінус. Нічого не буде видалено з конфігурації та посилань. Ідея тут полягає в тому, щоб видалити пакети NuGet, на які більше не посилається
James L

1
Відмінна відповідь! Якщо ви використовуєте TFS, ви повинні спочатку видалити весь вміст у ./packages у source source countrol explorer, щоб інші клієнти, як-от вбудовані машини, також видаляли зайві елементи.
Олександр Шмідт

4
@ sprinter252, якщо ви використовуєте відновлення пакету, вам не слід перевіряти пакунки в первинному контролі. Це одна з головних переваг використання відновлення пакунків. У рамках переходу до відновлення пакета в папці пакунків повинно бути розміщено правило "ігнорувати".
Карл Буссема

@CarlBussema Ви маєте рацію. Оскільки нова NuGet-версія це не так важливо, тому що Nuget не додасть бінарних файлів у підпапки. Отже ви отримуєте лише структуру папок. Мій коментар був пов'язаний з поведінкою TFS за замовчуванням (пакунки пакунків включені). У TFS Anywhere ігнорування часто ігнорується ;-). Важливо для змішаних проектів з Xamarin.
Олександр Шмідт

17

Спочатку відкрийте консоль диспетчера пакунків. Потім виберіть проект зі спадного списку. І запустіть наступні команди для видалення нугельних пакетів.

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 Package Manager -> Керування Nuget пакетами для вирішення

  2. У лівому стовпці, де знаходиться «Встановлені пакети», виберіть «Усі», тож ви побачите список встановлених пакетів та кнопку «Керування» через них.

  3. Виберіть кнопку Керування, і ви отримаєте спливаюче вікно, зніміть прапорець біля назви проекту та ОК

Решту роботи менеджер пакунків зробить це за вас.


1
Це, безумовно, відповідь, яку я шукав, дякую!
Сал

3

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

Видалення пакунка нута із сценарію msbuild

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

Сподіваюся, це допомагає.


2

Альтернативно - встановити невикористаний пакет, який ви хочете видалити, в будь-який проект вашого рішення, після цього видаліть його, і Nuget також видалить його.

Тут потрібна відповідна видалення.


Чи є спосіб, щоб його видалити належним чином, не перевстановлюючи його?
Нокс

2

Рішення 1

Використовуйте конвеєр Powerhell для отримання пакетів та видалення в одному операторі, як це

Get-Package | Uninstall-Package

Рішення 2

якщо ви хочете видалити вибрані пакети, виконайте наступні дії

  1. Використовуйте GetPackagesдля отримання списку пакетів
  2. Завантажте текстове програмне забезпечення Nimble
  3. Скопіюйте вихід GetPackagesу NimbleText (для кожного рядка у вікні списку)
  4. (Якщо потрібно, встановіть роздільник стовпців
  5. Тип Uninstall-Package $0(Заміна за допомогою вікна шаблону)
  6. Скопіюйте результати та вставте їх у Package Manage Console

Це будуть усі люди.


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. Перейдіть до програми «Сутінг» і натисніть на це правою кнопкою миші.

  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 Package Manager / Керуйте пакетами NuGet для вирішення ...

Крок 2: Зніміть галочку з поточного рішення

Крок 3: Зніміть вибір з проектів і натисніть OK


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