Wie können Sie die nicht verwendeten NuGet-Pakete in einer Lösung finden?


148

Wie können Sie die nicht verwendeten NuGet-Pakete in einer Lösung finden?

Ich habe eine Reihe von Lösungen, bei denen viele installierte Pakete vorhanden sind, und eine große Anzahl wird als aktualisiert gekennzeichnet.

Ich bin jedoch besorgt, dass möglicherweise Änderungen vorgenommen werden. Daher möchte ich zunächst alle nicht verwendeten Pakete entfernen.


2
Sie erkennen, dass das Brechen von Änderungen in Paketen, die Sie nicht verwenden, Sie sowieso nicht betrifft ... Was die Frage betrifft, entferne ich einfach alle NuGet-Pakete und füge erneut hinzu, was der Compiler mir sagt.
Ohad Schneider

5
@OhadSchneider Nein ... aber die OCD in mir will nicht die ganze Menge der nicht verwendeten Pakete, zB in der Bereitstellung
SteveC

Antworten:


57

ReSharper 2016.1 verfügt über eine Funktion zum Entfernen nicht verwendeten NuGet.

Es kann für eine Lösung und für jedes Projekt in einer Lösung ausgeführt werden und führt die folgenden Aktionen aus:

  1. Analysieren Sie Ihren Code und sammeln Sie Verweise auf Assemblys.
  2. Erstellen Sie ein NuGet-Nutzungsdiagramm basierend auf der Verwendung von Assemblys.
  3. Pakete ohne Inhaltsdateien, die selbst nicht verwendet werden und ohne verwendete Abhängigkeiten werden als nicht verwendet angenommen und zum Entfernen vorgeschlagen.

Leider funktioniert dies nicht für project.jsonProjekte ( RSRP-454515 ) und ASP.NET-Kernprojekte ( RSRP-459076 ).


2
Ich habe 2016.1 und R # entfernt keine nicht verwendeten Nuget-Referenzen. Ich verwende project.json mit nuget3 - ist das ein bekanntes Problem?
Peter McEvoy

2
@PeterMcEvoy Ja, dies ist ein bekanntes Problem. Vielen Dank für den Hinweis. Ich habe die Antwort aktualisiert, um dies zu verdeutlichen.
ulex

4
Ich muss blind sein, aber ich sehe keine Möglichkeit, dieses Tool tatsächlich auszuführen
claudekennilol

14
@ Claudekennilol hat es gerade herausgefunden. Klicken Sie mit der rechten Maustaste auf das Projekt und es gibt eine Option für "Referenzen optimieren ..."
Matt Sanders

1
@ Fraktal Richtig. Es ist sehr (zu) teuer für private Benutzer, aber wenn Sie an einem Arbeitsplatz arbeiten, lohnt sich Resharper für den wesentlich schnelleren und saubereren Workflow, den Sie im Vergleich zum Standard-VS erhalten.
Excludos

21

Sie können die Visual Studio-Erweiterung ResolveUR - Nicht verwendete Verweise auflösen verwenden

Lösen Sie nicht verwendete Verweise, einschließlich Nuget-Verweise in Visual Studio 2012/2013-Projekten, über den Menüpunkt im Projektfenster des Projektmappen-Explorers.

Es ist keine leichte Aufgabe, daher empfehle ich, vorher ein Backup zu erstellen und / oder ein Commit durchzuführen, nur um ein Rollback durchzuführen, wenn etwas schief gelaufen ist.


Dieses Programm ist zu eifrig, wenn es darum geht, Bibliotheken zu löschen ... Seien Sie vorsichtig, wenn Sie eine Website verwenden, werden Sie feststellen, dass viele DLLs notwendig sind, aber nicht mehr vorhanden sind. Wenn für ein NuGet-Paket ein anderes erforderlich ist, sollten Sie dieses nicht löschen, obwohl SIE keine feste Abhängigkeit davon haben.
Jsgoupil

Ich habe dieses Tool mit schlechten Ergebnissen verwendet. Es wurden viele Dinge entfernt (oder zumindest vorgeschlagen, sie zu entfernen), die tatsächlich verwendet wurden. Es gab einige Male, in denen ich den Vorschlägen vertraut habe und wertvolle Zeit damit verbringen musste, das wiederherzustellen, was entfernt wurde.
Ryan VandenHeuvel

2
[HINWEIS] Die Beschreibung besagt eindeutig:The tool is not tested to work with DotNet Web projects(Asp.Net, MVC), Windows CE, Silverlight project types. Use it at your own risk.
Korayem

Dieses Tool ist wirklich schön! Es ist klug genug, NUnit.ConsoleRunner usw. nicht zu entfernen, obwohl Sie in Ihrem Code keinen direkten Verweis darauf haben
OlegI

Dieses Tool ist langsam. Ich habe Lösung mit über 250 Projekten .. Ich habe gewartet .. und gewartet .. seufz
Piotr Kula

11

Sie können dies mit Resharper 2019.1.1 erreichen.

Klicken Sie mit der rechten Maustaste auf das Projekt> Refactor> Nicht verwendete Referenzen entfernen.

Wenn Ihr Projekt klein ist, können Sie auch> Verwendete Referenzen optimieren projizieren. . .

Ein Fenster wird geöffnet. Wählen Sie alle Referenzen aus und entfernen Sie sie alle. Gehen Sie dann zurück und fügen Sie diejenigen erneut hinzu, die einen Compilerfehler verursachen.


3
In VS.Net 2019 mit Resharper fand ich diese Option unter: Projektmappen- Explorer> Referenzen > Referenzen optimieren ...
R. Schreurs

"Das Werkzeugfenster" Referenzen optimieren "zeigt Baugruppenreferenzen an, die sowohl nicht verwendet als auch im aktuellen Projekt verwendet werden, und zeigt, wie genau Referenzen verwendet werden." blog.jetbrains.com/dotnet/2012/01/03/…
Nick Gallimore

1

Dies ist Handarbeit, aber es funktioniert.

  1. Verwenden Sie ReSharper oder ein ähnliches Code-Analyse-Tool, um nicht verwendete Referenzen in Ihren Projekten zu identifizieren und das Nuget in den entsprechenden Projekten zu deinstallieren.

  2. Manchmal verbleiben deinstallierte Nugets noch in den Listen Installierte Pakete und Updates im Dialogfeld NuGet-Pakete verwalten. Schließen Sie Visual Studio, löschen Sie den packagesOrdner, öffnen Sie die Lösung erneut und stellen Sie Ihre Nugets wieder her.


0

Ich glaube nicht, dass es einen Standardweg gibt, um dies herauszufinden. Der Hauptgrund ist die Vielzahl der Funktionen, die diese Pakete ausführen können, von der Referenzierung einer Assembly bis zum Einfügen von Quellcode in Ihr Projekt. Möglicherweise möchten Sie jedoch die Nuget.Extensions überprüfen . Der folgende Thread zu Codeplex befasst sich mit einem Überwachungsbericht von Nuget-Paketen.

http://nuget.codeplex.com/discussions/429694

(NuGet wurde von Codeplex nach GitHub verschoben. Archiv des obigen Links :) https://web.archive.org/web/20171212202557/http://nuget.codeplex.com:80/discussions/429694

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.