Ich weiß, dass ich das Paket von der PM-Konsole deinstallieren kann. Ich bin mit einem anderen Projekt auf einige Abhängigkeitsprobleme gestoßen und möchte von vorne beginnen. Ich muss alle Pakete auf einmal löschen. Gibt es einen Weg?
Antworten:
Um alle Pakete aus allen Projekten in der Lösung zu erhalten, verwenden Sie Get-Package
. Um alle Pakete aus einem bestimmten Projekt zu erhalten, verwenden Sie Get-Package -ProjectName "YourProjectName"
.
Seien Sie vorsichtig: Dadurch werden ALLE Pakete in der Lösung deinstalliert . Wenn
-Force
Parameter verwendet werden, werden Pakete entfernt, auch wenn Abhängigkeiten bestehen.
Get-Package | Uninstall-Package -RemoveDependencies -Force
Seien Sie vorsichtig: Dadurch werden ALLE Pakete im Projekt deinstalliert . Wenn
-Force
Parameter verwendet werden, werden Pakete entfernt, auch wenn Abhängigkeiten bestehen.
Get-Package -ProjectName "YourProjectName" |
Uninstall-Package -ProjectName "YourProjectName" -RemoveDependencies -Force
-force
. Das hat bei mir funktioniert.
Geben Sie in der Package Manager-Konsole einfach Folgendes ein:
get-package | uninstall-package -removedependencies
-Force
Schalter , um nicht in komplexen Abhängigkeitsgraphen hängen zu bleiben .
Wenn Sie jedes NuGet-Paket von jedem Projekt in einer Lösung deinstallieren möchten, verwenden Sie dies in der NuGet Package Manager-Konsole:
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}
Die Verwendung des Parameters -Force in meinem Fall hinterließ Änderungen an der Projektdatei und Verweise auf einige Binärdateien, die bei der normalen Deinstallation der Pakete entfernt werden sollten.
Hier ist eine naive Methode, um alle Pakete aus bestimmten Projekten zu deinstallieren, ohne den Parameter -Force zu verwenden. Tatsächlich wird versucht, die Pakete immer wieder zu deinstallieren, bis keine Pakete mehr vorhanden sind. Daher werden einige Fehler angezeigt, die abhängige Pakete erwähnen (sofern vorhanden). Diese werden jedoch immer seltener angezeigt, wenn die Blattpakete bei jeder Iteration entfernt werden.
Erwähnenswert ist auch, dass ich nur die folgenden PowerShell-Snippets in der PackageManager-Konsole getestet habe. ("Tools> NuGet Package Manager> Package Manager-Konsole")
Deinstallieren Sie alle Pakete aus allen Projekten in einer Lösung
while((Get-Project -All | Get-Package).Length -gt 0) { Get-Project -All | Get-Package | Uninstall-Package }
Entfernen Sie nur Projekte, die das Wort " WildCardSearch " enthalten.
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 }
Beachten Sie, dass dieses Snippet für immer ausgeführt wird, wenn Sie neben abhängigen Paketen ein anderes Problem haben, das eine Deinstallation des Pakets verhindert, bis Sie es manuell stoppen.
Ich glaube nicht, dass dies möglich ist, also deinstallieren Sie ALLE Pakete auf einmal. Wie Sie bereits angegeben haben, können Sie ein Paket deinstallieren, es aber auch anweisen, seine Abhängigkeiten wie folgt zu deinstallieren:
Deinstallieren Sie das Paket OpenIdPortableArea –RemoveDependencies
Hier ist ein Blog von Marcus Hammarberg, der dies erklärt: http://www.marcusoft.net/2011/02/nuget-uninstall-remove-dependencies.html
Dummy Old School für 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++
}
}
Ein Skript wurde aktualisiert, um alle Nuget-Pakete für ein einzelnes Projekt in der VS-Lösung zu entfernen:
$projectName = "MyProjectName"; $packages = Get-Package -ProjectName $projectName; foreach($package in $packages){ Uninstall-Package -ProjectName $projectName -Id $package.Id -Force}