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?
Odpowiedzi:
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"
.
Uważaj: spowoduje to odinstalowanie WSZYSTKICH pakietów w rozwiązaniu . Jeśli
-Force
używany jest parametr, pakiety są usuwane, nawet jeśli istnieją zależności.
Get-Package | Uninstall-Package -RemoveDependencies -Force
Uważaj: spowoduje to odinstalowanie WSZYSTKICH pakietów w projekcie . Jeśli
-Force
używany jest parametr, pakiety są usuwane, nawet jeśli istnieją zależności.
Get-Package -ProjectName "YourProjectName" |
Uninstall-Package -ProjectName "YourProjectName" -RemoveDependencies -Force
-force
. To zadziałało dla mnie.
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} }
$packages = Get-Package -ProjectName MyProjectName; foreach($package in $packages){ Uninstall-Package -ProjectName MyProjectName -Id $package.Id -Force}
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.
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
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++
}
}
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}