Як видалити * всі * nuget-пакети з рішення у Visual Studio


90

Я знаю, що можу видалити пакет з консолі PM. Я зіткнувся з деякими проблемами залежності з іншим проектом, і я хочу почати спочатку, і мені потрібно видалити всі пакунки одним пострілом. Чи є спосіб?

Відповіді:


132

Щоб отримати всі пакети з усіх проектів, використовуйте рішення Get-Package. Щоб отримати всі пакети від використання конкретного проекту Get-Package -ProjectName "YourProjectName".


Видаліть усі пакети з усіх проектів у рішенні

Будьте обережні: Це призведе до видалення ВСІХ пакетів у розчині . Якщо -Forceвикористовується параметр, пакети видаляються, навіть якщо існують залежності.

Get-Package | Uninstall-Package -RemoveDependencies -Force


Видаліть усі пакети з певного проекту в рамках рішення

Будьте обережні: Це видалить ВСІ пакети в проекті . Якщо -Forceвикористовується параметр, пакети видаляються, навіть якщо існують залежності.

Get-Package -ProjectName "YourProjectName" | 
Uninstall-Package -ProjectName "YourProjectName" -RemoveDependencies -Force

27
Я рекомендую додати параметр -Force в кінці. Без цього я не можу видалити всі свої залежності на основі залежностей з іншими пакетами NuGet.
Шон Стейнс,

Це справжня відповідь. У поєднанні з пропозицією Шона використовувати -force. Це спрацювало для мене.
Spikee

86

У консолі диспетчера пакетів просто введіть:

get-пакет | uninstall-package -removedependencies


14
Щоб не застрягти в складному графіку залежностей, використовуйте -Forceперемикач.
Аліреза

12
ПОПЕРЕДЖЕННЯ: Ця похвала видалить всі пакети в межах всього РІШЕННЯ.
Яків

31

спробуйте це:

get-package | uninstall-package -removedependencies -force

15

Якщо ви хочете видалити кожен пакет NuGet з кожного проекту в рішенні, використовуйте це в консолі менеджера пакетів NuGet:

foreach($project in $projects){ $packages = Get-Package -ProjectName $project.Name; foreach($package in $packages){ Uninstall-Package -ProjectName $project.Name -Id $package.Id -Force} }

4
Чудова відповідь. Сценарій для одного проекту:$packages = Get-Package -ProjectName MyProjectName; foreach($package in $packages){ Uninstall-Package -ProjectName MyProjectName -Id $package.Id -Force}
Mohsen Afshin

10

Використання параметра -Force у моєму випадку залишило модифікації файлів проекту та посилання на деякі двійкові файли, які слід було видалити при звичайній деінсталяції пакетів.

Ось наївний метод видалення всіх пакетів із конкретних проектів без використання параметра -Force. По суті, він намагається видаляти пакети знову і знову, поки не залишиться жодного пакета, тому ви побачите деякі помилки, згадуючи залежні пакети (якщо вони є), але вони з’являтимуться все рідше, оскільки листові пакети видаляються за кожну ітерацію.

Також варто згадати, що я протестував лише такі фрагменти PowerShell у консолі PackageManager. ("Інструменти> Менеджер пакунків NuGet> Консоль менеджера пакетів")

Видаліть усі пакети з усіх проектів у рішенні

while((Get-Project -All | Get-Package).Length -gt 0) { Get-Project -All | Get-Package | Uninstall-Package }

Видаляйте лише проекти, що містять слово " WildCardSearch "

while((Get-Project -All | Where-Object ProjectName -like '*WildCardSearch*'  | Get-Package).Length -gt 0) { Get-Project -All | Where-Object ProjectName -like '*WildCardSearch*' | Get-Package | Uninstall-Package }

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


3

Я не вірю, що це можливо, тому видаліть ВСІ пакунки відразу. Однак, як ви вже вказали, ви можете видалити пакет, але ви також можете сказати йому, що він повинен встановити залежності, виконавши наступне:

Видалити-пакет OpenIdPortableArea –Видалити залежності

Ось блог Маркуса Гаммарберга, який пояснює це: http://www.marcusoft.net/2011/02/nuget-uninstall-remove-dependencies.html


3
"Видалити залежності" працює, коли 1 пакет залежить від багатьох інших. Це не працює, коли N пакетів залежать від основного (наприклад, Boost). Вам потрібно вручну видаляти пакунки NuGet Boost по черзі, що є біль.
quant_dev

1

Фіктивна стара школа для циклу:

$packages = get-package
$packageId = "Apache.NMS.ActiveMQ"


$counter = 1
foreach($package in $packages){     
    if($package.Id -eq $packageId)
    {   
        Write-Host "`n$counter-Deleting Package:`n"
        $package        
        Uninstall-Package -Id $packageId -ProjectName $package.ProjectName -RemoveDependencies 
        Write-Host "`n============================================`n"
        $counter++
    }
}

1

Оновлений сценарій для видалення всіх nuget-пакетів для одного проекту в рішенні VS:

$projectName = "MyProjectName"; $packages = Get-Package -ProjectName $projectName; foreach($package in $packages){ Uninstall-Package -ProjectName $projectName -Id $package.Id -Force}

0

Автоматичне відновлення (видалення та встановлення) пакетів у проекті за допомогою консолі Package Manager:

Пакет оновлення -Перевстановіть

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