Wie deinstalliere ich * alle * Nuget-Pakete von einer Lösung in Visual Studio?

88

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?

dgorti
quelle

Antworten:

128

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".


Entfernen Sie alle Pakete aus allen Projekten in der Lösung

Seien Sie vorsichtig: Dadurch werden ALLE Pakete in der Lösung deinstalliert . Wenn -ForceParameter verwendet werden, werden Pakete entfernt, auch wenn Abhängigkeiten bestehen.

Get-Package | Uninstall-Package -RemoveDependencies -Force


Entfernen Sie alle Pakete aus einem bestimmten Projekt innerhalb einer Lösung

Seien Sie vorsichtig: Dadurch werden ALLE Pakete im Projekt deinstalliert . Wenn -ForceParameter verwendet werden, werden Pakete entfernt, auch wenn Abhängigkeiten bestehen.

Get-Package -ProjectName "YourProjectName" | 
Uninstall-Package -ProjectName "YourProjectName" -RemoveDependencies -Force
normannisch
quelle
27
Ich empfehle, den Parameter -Force am Ende hinzuzufügen. Ohne sie kann ich nicht alle meine Abhängigkeiten basierend auf Abhängigkeiten mit anderen NuGet-Paketen deinstallieren.
Sean Stayns
Das ist die wahre Antwort. Kombiniert mit Seans Vorschlag zu verwenden -force. Das hat bei mir funktioniert.
Spikee
84

Geben Sie in der Package Manager-Konsole einfach Folgendes ein:

get-package | uninstall-package -removedependencies

Vladimir Zalmanek
quelle
13
Verwenden Sie den -ForceSchalter , um nicht in komplexen Abhängigkeitsgraphen hängen zu bleiben .
Alireza
11
WARNUNG: Mit dieser Empfehlung werden alle Pakete innerhalb der gesamten LÖSUNG deinstalliert.
Jacob
30

Versuche dies:

get-package | uninstall-package -removedependencies -force
AHA
quelle
15

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} }
Michal Steyn
quelle
4
Gute Antwort. Drehbuch für ein einzelnes Projekt:$packages = Get-Package -ProjectName MyProjectName; foreach($package in $packages){ Uninstall-Package -ProjectName MyProjectName -Id $package.Id -Force}
Mohsen Afshin
10

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.

Nathan
quelle
2

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

kredit.burger
quelle
3
"Abhängigkeiten entfernen" funktioniert, wenn 1 Paket von vielen anderen abhängt. Es funktioniert nicht, wenn N Pakete vom Kernpaket abhängen (z. B. Boost). Sie müssen die NuGet Boost-Pakete einzeln manuell entfernen, was sehr schmerzhaft ist.
quant_dev
1

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++
    }
}
Teoman Shipahi
quelle
0

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}
Vlad Setchin
quelle
0

Automatische Wiederherstellung (Deinstallation und anschließende Installation) von Paketen in einem Projekt mithilfe der Package Manager-Konsole:

Update-Paket-Neu installieren

Mariusz
quelle