Jak odinstalować * wszystkie * pakiety NuGet z rozwiązania w programie Visual Studio

90

Wiem, że mogę odinstalować pakiet z konsoli PM. Wystąpiły problemy z zależnościami w innym projekcie i chcę zacząć od nowa i muszę usunąć wszystkie pakiety za jednym razem. Czy istnieje sposób?

dgorti
źródło

Odpowiedzi:

132

Aby pobrać wszystkie pakiety ze wszystkich projektów w rozwiązaniu, użyj Get-Package. Aby uzyskać wszystkie pakiety z określonego projektu, użyj Get-Package -ProjectName "YourProjectName".


Usuń wszystkie pakiety ze wszystkich projektów w rozwiązaniu

Uważaj: spowoduje to odinstalowanie WSZYSTKICH pakietów w rozwiązaniu . Jeśli -Forceużywany jest parametr, pakiety są usuwane, nawet jeśli istnieją zależności.

Get-Package | Uninstall-Package -RemoveDependencies -Force


Usuń wszystkie pakiety z określonego projektu w ramach rozwiązania

Uważaj: spowoduje to odinstalowanie WSZYSTKICH pakietów w projekcie . Jeśli -Forceużywany jest parametr, pakiety są usuwane, nawet jeśli istnieją zależności.

Get-Package -ProjectName "YourProjectName" | 
Uninstall-Package -ProjectName "YourProjectName" -RemoveDependencies -Force
Norman
źródło
27
Na koniec polecam dodać parametr -Force. Bez tego nie mogę odinstalować wszystkich moich zależności opartych na zależnościach z innymi pakietami NuGet.
Sean Stayns
To jest prawdziwa odpowiedź. W połączeniu z sugestią Seana -force. To zadziałało dla mnie.
Spikee
86

W konsoli Menedżera pakietów wystarczy wpisać:

pobierz pakiet | uninstall-package -removedependencies

Vladimir Zalmanek
źródło
14
Aby nie utknąć w złożonym wykresie zależności, użyj -Forceprzełącznika.
Alireza
12
OSTRZEŻENIE: To polecenie odinstaluje wszystkie pakiety w całym ROZWIĄZANIU.
Jacob
31

Spróbuj tego:

get-package | uninstall-package -removedependencies -force
AHA
źródło
15

Jeśli chcesz odinstalować każdy pakiet NuGet z każdego projektu w rozwiązaniu, użyj tego w konsoli Menedżera pakietów NuGet:

foreach($project in $projects){ $packages = Get-Package -ProjectName $project.Name; foreach($package in $packages){ Uninstall-Package -ProjectName $project.Name -Id $package.Id -Force} }
Michał Steyn
źródło
4
Świetna odpowiedź. Scenariusz pojedynczego projektu:$packages = Get-Package -ProjectName MyProjectName; foreach($package in $packages){ Uninstall-Package -ProjectName MyProjectName -Id $package.Id -Force}
Mohsen Afshin
10

Użycie parametru -Force w moim przypadku pozostawiło modyfikacje pliku projektu i odniesienia do niektórych plików binarnych, które powinny zostać usunięte podczas normalnego odinstalowywania pakietów.

Oto naiwna metoda odinstalowywania wszystkich pakietów z określonych projektów bez użycia parametru -Force. Skutecznie próbuje odinstalować pakiety w kółko, aż nie ma już żadnych pakietów, więc zobaczysz błędy wspominające o pakietach zależnych (jeśli je masz), ale będą one pojawiać się coraz rzadziej, gdy pakiety-liście zostaną usunięte w każdej iteracji.

Warto również wspomnieć, że przetestowałem tylko następujące fragmenty programu PowerShell w konsoli PackageManager. („Narzędzia> Menedżer pakietów NuGet> Konsola Menedżera pakietów”)

Odinstaluj wszystkie pakiety ze wszystkich projektów w rozwiązaniu

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

Usuń tylko projekty zawierające słowo „ 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 }

Zwróć uwagę, że jeśli oprócz pakietów zależnych masz inny problem uniemożliwiający odinstalowanie pakietu, ten fragment kodu będzie działał wiecznie, dopóki nie zatrzymasz go ręcznie.

Nathan
źródło
3

Nie wierzę, że jest to możliwe, więc odinstaluj WSZYSTKIE pakiety naraz. Jednak, jak już wskazałeś, możesz odinstalować pakiet, ale możesz także powiedzieć mu, aby odinstalował jego zależności, wykonując następujące czynności:

Odinstaluj pakiet OpenIdPortableArea –RemoveDependencies

Oto blog Marcusa Hammarberga wyjaśniający to: http://www.marcusoft.net/2011/02/nuget-uninstall-remove-dependencies.html

pożyczka.burger
źródło
3
„Usuń zależności” działa, gdy 1 pakiet zależy od wielu innych. Nie działa, gdy pakiety N zależą od podstawowego (np. Boost). Musisz ręcznie usunąć pakiety NuGet Boost ręcznie jeden po drugim, co jest uciążliwe.
quant_dev
1

Dummy old-school for loop:

$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++
    }
}
Teoman shipahi
źródło
1

Zaktualizowano skrypt, aby usunąć wszystkie pakiety NuGet dla pojedynczego projektu w rozwiązaniu VS:

$projectName = "MyProjectName"; $packages = Get-Package -ProjectName $projectName; foreach($package in $packages){ Uninstall-Package -ProjectName $projectName -Id $package.Id -Force}
Vlad Setchin
źródło
0

Automatyczne przywracanie (odinstalowanie, a następnie instalacja) pakietów w projekcie za pomocą konsoli Menedżera pakietów:

Update-Package -Reinstall

Mariusz
źródło