Wie lösche ich NuGet-Pakete, auf die von keinem Projekt in meiner Lösung verwiesen wird?

141

Irgendwie habe ich es während des Upgrades auf VS2012 und .NET 4.5 geschafft, NuGet zu verwirren. Es gibt Pakete im Paketmanager (und im Paketordner), die ich nicht löschen kann (ich glaube, es handelt sich um ältere ASP.NET NuGet-Pakete, die durch neue Paketnamen mit der neuen Version ersetzt wurden. Sie haben jeweils nur eine Schaltfläche Verwalten - aber keine Deinstallationsschaltfläche. Und wenn Sie sehen, wo sie verwendet werden, können Sie sehen, dass sie von keinem der Projekte der Lösung referenziert werden? Sie zeigen KEINE Deinstallation an?

Howard Pinsley
quelle

Antworten:

108

Sie können die Package Manager-Konsole mit dem Befehl: verwenden Uninstall-Package PackageId, um sie zu entfernen, oder einfach den Paketordner aus dem Ordner "Pakete" unter dem Lösungsordner löschen. Weitere Informationen zur Package Manager-Konsole finden Sie hier: http://docs.nuget.org/docs/reference/package-manager-console-powershell-reference

Pavel Bakshy
quelle
8
Danke Pavel. Ich hatte das Gefühl, Sie könnten einfach die Ordner löschen. Es ist ein wenig beunruhigend, weil ich manuell sicherstellen muss, dass keines der Pakete referenziert wird (sie scheinen es nicht zu sein). Ich bin immer noch neugierig zu wissen, warum der Paketmanager keine Schaltfläche zum Deinstallieren (oder Entfernen) anzeigt.
Howard Pinsley
2
Der Paketmanager auf Lösungsebene zeigt alle Paketverweise auf Projekte aus der Lösung und zusätzlich alle Pakete an, die im Paketordner abgelegt, aber nicht referenziert wurden. Für diese Pakete keine Deinstallationsmöglichkeit in der Benutzeroberfläche. Ich bin damit einverstanden, dass es auf falsches Verhalten zurückzuführen ist, aber in diesem Fall sollten Sie es manuell überprüfen. Und löschen Sie das Paket oder installieren Sie es neu, wenn Sie sicher sind, dass Sie es brauchen oder nicht.
Pavel Bakshy
1
Wenn Sie nur den Ordner entfernen und zu NuGet zurückkehren und das Paket anzeigen, wird es immer noch als installiert mit dem grünen Häkchen angezeigt. Besser, Sie führen die ordnungsgemäße Deinstallation über die Konsole durch.
k80sg
1
@ysrb, es ist ein Powershell-Befehl, der Verb-Nomen wie get-user oder remove-item lautet. Ihr Beispiel ist Nomen-Verb
Nick Young
1
@ysrb Wie Nick Young sagt, und außerdem wäre es ein schreckliches Kompliment an Install-Package.
ProfK
159

Ich habe eine Problemumgehung dafür gefunden.

  1. Paketwiederherstellung und automatische Überprüfung aktivieren (Optionen / Paketmanager / Allgemein)
  2. Löschen Sie den gesamten Inhalt des Paketordners (in den Papierkorb, wenn Sie nervös sind!)
  3. Verwalten von Nuget-Paketen zur Lösung
  4. Klicken Sie auf die Schaltfläche Wiederherstellen.

NuGet stellt nur die in Ihrer Lösung verwendeten Pakete wieder her. Am Ende erhalten Sie einen schönen, optimierten Satz von Paketen.

James L.
quelle
1
Wird nicht das nicht das Paket entfernen packages.configund nicht die Verweise aus dem Projekt entfernen?
CodeCaster
1
@CodeCaster schwer zu analysieren, Ihr doppeltes Negativ. Nichts wird aus der Konfiguration und den Referenzen entfernt. Die Idee hier ist, die NuGet-Pakete zu entfernen, auf die nicht mehr verwiesen wird
James L
1
Hervorragende Antwort! Wenn Sie TFS verwenden, sollten Sie zuerst den gesamten Inhalt von ./packages im Quellland-Explorer löschen, damit andere Clients wie Build-Maschinen auch redundante Elemente entfernen.
Alexander Schmidt
4
@ sprinter252, wenn Sie die Paketwiederherstellung verwenden, sollten Sie die Pakete überhaupt nicht in die Quellcodeverwaltung einchecken. Dies ist einer der Hauptvorteile der Paketwiederherstellung. Im Rahmen der Konvertierung in die Paketwiederherstellung sollte eine "Ignorier" -Regel im Paketordner abgelegt werden.
Carl Bussema
@ CarlBussema Du hast recht. Seit der neuen NuGet-Version ist dies nicht so wichtig, da Nuget den Unterordnern keine Binärdateien hinzufügt. Sie erhalten also nur die Ordnerstruktur. Mein Kommentar bezog sich auf das Standardverhalten von TFS (inklusive Paketordner). Bei TFS Anywhere werden Ignorierungen oft ignoriert ;-). Wichtig für gemischte Projekte mit Xamarin.
Alexander Schmidt
17

Öffnen Sie zuerst die Package Manager-Konsole. Wählen Sie dann Ihr Projekt aus der Dropdown-Liste aus. Führen Sie die folgenden Befehle aus, um Nuget-Pakete zu deinstallieren.

Get-Package

um das gesamte Paket zu erhalten, das Sie installiert haben.

und dann

Uninstall-Package PagedList.Mvc

--- um ein Paket mit dem Namen PagedList.MVC zu deinstallieren

Botschaft

PM> Uninstall-Package PagedList.Mvc
Successfully removed 'PagedList.Mvc 4.5.0.0' from MCEMRBPP.PIR.
Abdus Salam Azad
quelle
Diese Antwort hat bei mir perfekt funktioniert. Meine Situation war, dass das Paket nur auf der Registerkarte "Updates" des Dialogfelds angezeigt wurde. Wenn ich auf "Aktualisieren" klickte, wurde das Paket in keinem Projekt installiert. Es gab also keine Möglichkeit, es zu aktualisieren oder zu entfernen.
Azarc3
8

Wenn Sie das Nuget-Paket löschen / deinstallieren möchten, das auf mehrere Projekte in Ihren Lösungen angewendet wird, gehen Sie zu:

  1. Tools-> Nuget Package Manager -> Nuget Packages for Solution verwalten

  2. Wählen Sie in der linken Spalte "Installierte Pakete" die Option "Alle" aus, damit eine Liste der installierten Pakete und die Schaltfläche "Verwalten" angezeigt werden.

  3. Wählen Sie die Schaltfläche Verwalten und Sie erhalten ein Pop-out. Deaktivieren Sie das Kontrollkästchen neben Projektname und OK

Der Rest der Arbeit Package Manager erledigt dies für Sie.


quelle
1
Dies ist definitiv die Antwort, nach der ich gesucht habe, danke!
Sal
3

Wenn Sie das Paket mit dem Dienstprogramm Uninstall-Package entfernt und das gewünschte Paket aus dem Paketverzeichnis unter Lösung gelöscht haben (und immer noch eine Fehlermeldung angezeigt wird), öffnen Sie einfach die Datei * .csproj im Code-Editor und entfernen Sie das Tag manuell. Wie zum Beispiel, wollte ich von Nuget Paket loszuwerden Xamarin.Forms.Alias und entfernte ich diese Zeilen aus * CSPROJ Datei.

Nuget-Paket aus dem msbuild-Skript entfernen

Vergessen Sie nicht, Ihr Projekt neu zu laden, sobald Sie in Visual Studio dazu aufgefordert werden (nachdem Sie die Projektdatei geändert haben). Ich habe es in Visual Studio 2015 versucht, aber es sollte auch in Visual Studio 2010 und höher funktionieren.

Hoffe das hilft.

AB
quelle
2

Alternativ können Sie das nicht verwendete Paket, das Sie löschen möchten, in einem beliebigen Projekt Ihrer Lösung installieren. Anschließend deinstallieren Sie es und Nuget entfernt es ebenfalls.

Hier wird ein geeignetes Deinstallationsprogramm benötigt.

D. Rosado
quelle
Gibt es eine Möglichkeit, es ordnungsgemäß zu deinstallieren, ohne es erneut zu installieren?
Knox
2

Lösung 1

Verwenden Sie die Powershell-Pipeline, um Pakete abzurufen und in einer einzigen Anweisung wie dieser zu entfernen

Get-Package | Uninstall-Package

Lösung 2

Wenn Sie ausgewählte Pakete deinstallieren möchten, führen Sie die folgenden Schritte aus

  1. Verwenden Sie GetPackagesdiese Option , um die Liste der Pakete abzurufen
  2. Download Nimble Text Software
  3. Kopieren Sie die Ausgabe von GetPackages in NimbleText (für jede Zeile im Listenfenster)
  4. Stellen Sie Column Seperator (bei Bedarf auf ein
  5. Typ Uninstall-Package $0(Ersetzen durch Musterfenster)
  6. Kopieren Sie die Ergebnisse und fügen Sie sie in die Package Manage Console ein

Das sind alle Leute.

irfandar
quelle
1

Ein NuGet-Paket kann auf ein anderes NuGet-Paket verweisen. Seien Sie daher sehr vorsichtig mit Abhängigkeiten zwischen Paketen. Ich habe gerade ein Google Map-Paket deinstalliert und anschließend zugrunde liegende Pakete wie Newtonsoft, Entity Framework usw. deinstalliert.

Das manuelle Löschen eines bestimmten Pakets aus dem Paketordner wäre daher sicherer.

Aki
quelle
1

Im Fenster der Paketmanager-Konsole kann häufig jeder Befehl, den Sie zum Installieren eines Pakets verwendet haben, zum Deinstallieren dieses Pakets verwendet werden. Ersetzen Sie einfach den Befehl INSTALL durch UNINSTALL .

Um beispielsweise PowerTCPTelnet zu installieren, lautet der Befehl:

Install-Package PowerTCPTelnet -Version 4.4.9

Um dasselbe zu deinstallieren, lautet der Befehl:

Uninstall-Package PowerTCPTelnet -Version 4.4.9

Jazimov
quelle
1

VS2019> Extras> Optionen> Nuget Package Manager> Allgemein> Klicken Sie auf "Alle Nuger-Caches löschen".

Harris
quelle
-2

Ein anderer Weg und für mich am einfachsten ist:

  1. Gehen Sie zu Ihrem Soution und klicken Sie mit der rechten Maustaste darauf.

  2. Wählen Sie die Option "Managed NUgets Packages for Solution". Das öffnet ein Popup-Fenster, in dem Sie auf "Einstellungen" klicken. Dies öffnet ein anderes Popup-Fenster und sucht dann: "Package Manager".

  3. Innerhalb der Option "Paketmanager" haben Sie zwei weitere Optionen (I. Allgemeines II. Paketquellen) Deaktivieren Sie in jeder Option alle Kontrollkästchen.

Diese Schritte deaktivieren NuGet aus Ihrem Projekt.

Ich hoffe wirklich, Ihnen zu helfen.

amedriveroperez
quelle
-2

Wenn Sie die Visual Studio-Option verwenden möchten, lesen Sie bitte den folgenden Link

http://spvenky.wordpress.com/2014/08/10/how-to-remove-nuget-packages-from-existing-visual-studio-solution/

Schritt 1: Gehen Sie in Visual Studio zu Tools / NuGet Package Manager / Verwalten von NuGet-Paketen für die Lösung…

Schritt 2: Deaktivieren Sie Ihre Projekte von der aktuellen Lösung

Schritt 3: Deaktivieren Sie die Projekte und drücken Sie OK

user1214835
quelle
2
Es ist vorzuziehen, die Antwort in StackOverflow zu schreiben, anstatt nur einen Link zu veröffentlichen, da Links in Zukunft ablaufen können.
Amadeus Sánchez