Ich habe eine Lösung mit mehreren Projekten. Die meisten Referenzen von Drittanbietern fehlen, es gibt jedoch packages.config
Dateien für jedes Projekt. Wie bringe ich NuGet dazu, alle benötigten Pakete zu installieren / zu aktualisieren? Muss dies für jedes Projekt über die Befehlszeile erfolgen?
673
Antworten:
Sie können nuget.exe verwenden , um Ihre Pakete wiederherzustellen, oder mit NuGet 2.7 oder höher können Sie Ihre Lösung einfach in Visual Studio kompilieren, wodurch auch die fehlenden Pakete wiederhergestellt werden.
Für NuGet.exe können Sie für jedes Projekt den folgenden Befehl ausführen.
Oder mit NuGet 2.7 können Sie alle Pakete in der Lösung über die Befehlszeile wiederherstellen .
Beide ziehen die Pakete herunter. Ihre Projektdateien werden jedoch nicht geändert, wenn Sie diesen Befehl ausführen, sodass das Projekt bereits einen Verweis auf die NuGet-Pakete enthalten sollte. Ist dies nicht der Fall, können Sie die Pakete mit Visual Studio installieren.
Ab NuGet 2.7 stellt Visual Studio fehlende NuGet-Pakete automatisch wieder her, wenn Sie Ihre Lösung erstellen, sodass NuGet.exe nicht verwendet werden muss.
Um alle Pakete in Ihrer Lösung zu aktualisieren, stellen Sie sie zuerst wieder her. Anschließend können Sie entweder mit NuGet.exe die Pakete aktualisieren oder in Visual Studio die Pakete über das Fenster "Package Manager Console" aktualisieren oder schließlich "Verwalten" verwenden Paketdialog.
Über die Befehlszeile können Sie Pakete in der Lösung auf die neueste Version aktualisieren, die auf nuget.org verfügbar ist.
Beachten Sie, dass hierdurch keine PowerShell-Skripts in NuGet-Paketen ausgeführt werden.
In Visual Studio können Sie die Paketmanager-Konsole verwenden, um auch die Pakete zu aktualisieren. Dies hat den Vorteil, dass alle PowerShell-Skripts als Teil des Updates ausgeführt werden, wenn sie bei Verwendung von NuGet.exe nicht ausgeführt werden. Der folgende Befehl aktualisiert alle Pakete in jedem Projekt auf die neueste Version von nuget.org.
Sie können dies auch auf ein Projekt beschränken.
Wenn Sie die Pakete auf die gleichen Versionen wie zuvor installieren möchten, können Sie das
-reinstall
Argument mit demUpdate-Package
Befehl verwenden.Sie können dies auch auf ein Projekt beschränken.
Die
-reinstall
Option wird zuerst deinstalliert und dann das Paket wieder in einem Projekt installiert.Sie können die Pakete auch über den
Manage Packages
Dialog aktualisieren .Aktualisierung:
-reinstall
quelle
Update-Package -reinstall -Project ProjectName
Installieren Sie alle Pakete in ALL PROJECTS der aktuellen Lösung neu:
Installieren Sie alle Pakete in SPECIFIC PROJECT der aktuellen Lösung neu ( dank Unarity und Asche999 ):
quelle
Es gibt eine andere, neuere und schnellere Möglichkeit, dies in Visual Studio zu tun. Schauen Sie sich diesen Beitrag von David Ebbo an und lesen Sie den Kommentarbereich, wenn Sie auf Probleme stoßen. Grundsätzlich gehen Sie in der Eingabeaufforderung des Paketmanagers wie folgt vor:
Wenn Sie anschließend Ihre Lösung erstellen, werden die Pakete automatisch installiert, wenn sie fehlen.
Aktualisieren:
Diese Funktionalität ist in Nuget 1.6 mit Visual Studio-Integration integriert, sodass Sie nicht einmal NuGetPowerTools installieren oder Befehle eingeben müssen. Alles was du tun musst, ist
Lesen Sie diesen Artikel für weitere Details.
quelle
Hier ist eine weitere Lösung, wenn Sie Website-Projekte verwenden oder die Wiederherstellung von NuGet-Paketen nicht aktivieren möchten.
Mit der Paketmanagerkonsole können Sie alle Pakete in der Datei package.config auflisten und erneut installieren.
quelle
$packages.packages.package | % { Update-Package -reinstall -id $($_.id) }
Update-Package -Reinstall
.Dies ist das beste und einfachste Beispiel, das ich gefunden habe. Es werden alle in packages.config aufgelisteten Nugets neu installiert und die aktuellen Versionen beibehalten. Durch
YourProjectNameGoesHere
den Projektnamen ersetzen .quelle
Mit der neuesten NuGet 2.5-Version gibt es jetzt eine Schaltfläche "Alle aktualisieren" im Paketmanager: http://docs.nuget.org/docs/release-notes/nuget-2.5#Update_All_button_to_allow_updating_all_packages_at_once
quelle
Ich verwende Visual Studio 2015 und die oben angegebenen Lösungen haben bei mir nicht funktioniert. Deshalb habe ich Folgendes getan:
Löschen Sie den Paketordner aus meiner Lösung sowie die Ordner bin und obj aus jedem Projekt in der Lösung und erstellen Sie ihn neu.
Vielleicht haben Sie den nächsten Fehler:
So lösen Sie dies: Ändern Sie diese Zeile in Ihrer NuGet.targets-Datei und setzen Sie sie auf true:
Referenz: https://stackoverflow.com/a/30918648 und https://stackoverflow.com/a/20502049
quelle
Wenn Sie Nuget 2.8 installieren, aktivieren Sie das Kontrollkästchen
in Visual Studio. Wenn diese Option aktiviert ist, werden durch einfaches erneutes Erstellen des Projekts alle Referenzbibliotheken wiederhergestellt.
quelle
Allow NuGet to download missing packages
aktivieren.Nach 3 Stunden Suche und Untersuchung.
Ich hatte Probleme damit, weil wir zwei Mitglieder im Team haben (mit GitHub-Quellcodeverwaltung), weil wir die Dateien für Pakete zum Senden an das Remote-Repository nicht eingeschränkt haben. Eines der Teammitglieder hat Pakete an den Server gesendet, und ich habe diese Änderungen vorgenommen mein Einheimischer.
Danach hatte ich das gleiche Problem wie PO, außerdem konnte ich mein API-Projekt nicht auf dem Server veröffentlichen.
Am und habe ich gerade benutzt
Update-Package -Reinstall - Führen Sie diesen Befehl in der Package Manager-Konsole aus
Dieser Befehl installiert alle Ihre Pakete neu, die Sie in Ihrer Lösung verwendet haben. (Für jedes Projekt)
Installieren Sie alle Pakete in ALL PROJECTS der aktuellen Lösung neu:
Update-Package -ProjectName 'NameOfProject' -Reinstall - Führen Sie diesen Befehl in der Package Manager-Konsole aus
Dieser Befehl installiert alle Ihre Pakete neu, die sich auf ein Projekt beziehen, das Sie nach "-ProjectName" angegeben haben. Und ich denke, dass dies besser ist, weil ich eine halbe Stunde gewartet habe, um alle Pakete in Lösung neu zu installieren.
Dafür vielen Dank an Rodolpho Brock .
Außerdem würde ich Ihnen empfehlen, beim Abrufen von Änderungen vom Remote-Server auf die Schaltfläche "Pakete wiederherstellen" zu klicken, die von Visual Studio angezeigt wird.
quelle
Ich glaube, das erste, was Sie tun müssen, ist die Paketwiederherstellungsfunktion zu aktivieren . Siehe auch hier . Dies erfolgt auf Lösungsebene (nicht auf Projektebene).
Aber das bringt Sie nicht ganz weiter - ich bin auf ein ähnliches Problem gestoßen, nachdem ich die Wiederherstellungsfunktion aktiviert habe. (VS2013, NuGet 2.8.)
Es stellte sich heraus, dass ich die Pakete (unbeabsichtigt) zur Quellcodeverwaltung verpflichtet hatte, als ich das Projekt festschrieb - aber Visual Studio (und das Versionsverwaltungs-Plugin) hatten die Binärdateien beim Einchecken hilfreich ignoriert.
Das Problem trat auf, als ich einen Release-Zweig erstellte. Meine lokale Kopie des dev / main / trunk-Zweigs hatte die Binärdateien, da ich dort ursprünglich die Pakete installiert / heruntergeladen hatte.
In der neuen Release-Filiale
.nupkg
-dateien waren alle vorhanden. NuGet glaubte also nicht, dass etwas wiederhergestellt werden musste.Ich habe alle Paketordner in
$(SolutionDir)/packages
(unter dem Release-Zweig) gelöscht und dann eine vollständige Neuerstellung ausgeführt. Diesmal war der Build erfolgreich.... und dann ging ich natürlich zurück und entfernte die Paketordner aus der Quellcodeverwaltung (im Trunk- und Release-Zweig). Mir ist (noch) nicht klar, ob die
repositories.config
Datei ebenfalls entfernt werden soll.Viele der von den Projektvorlagen für Sie installierten Komponenten - zumindest für Webprojekte - sind NuGet-Pakete. Das heißt, dieses Problem ist nicht auf Pakete beschränkt, die Sie hinzugefügt haben.
Aktivieren Sie daher die Paketwiederherstellung sofort nach dem Erstellen des Projekts / der Lösung und löschen Sie den
packages
Ordner , bevor Sie einen ersten Check-in durchführen (und stellen Sie sicher, dass Sie den.nuget
Ordner der Quellcodeverwaltung übergeben).Haftungsausschluss: Ich habe hier auf SO eine andere Antwort gesehen, die darauf hinwies, dass das Löschen des
packages
Ordners Teil der Lösung war. Das hat mich auf den richtigen Weg gebracht, daher möchte ich dem Autor die Ehre erweisen, aber ich kann diese Frage / Antwort nicht mehr finden. Ich werde eine Bearbeitung veröffentlichen, wenn ich darauf stoße.Ich würde auch bemerken, dass
Update-Package -reinstall
die.sln
und.csproj
/.vbproj
Dateien geändert werden. Zumindest hat es das in meinem Fall getan. Welches IMHO macht diese Option viel weniger attraktiv.quelle
Ich habe es versucht,
Update-Package -reinstall
aber es schlägt bei einem Paket fehl und hat die Verarbeitung aller verbleibenden Projektpakete in meiner Lösung gestoppt.Am Ende hatte ich mein Skript, das alle package.config-Dateien auflistet und
Update-Package -Reinstall -ProjectName prj -Id pkg
für jedes Projekt / Paket ausführt .Hoffe, es kann für jemanden nützlich sein:
Bearbeiten: Dies ist ein Fehler, den ich hatte: Update-Paket: Paket 'EntityFramework.BulkInsert-ef6' konnte nicht gefunden werden. Bestehende Pakete müssen wiederhergestellt werden, bevor eine Installation oder ein Update durchgeführt wird. Manueller Lauf
Update-Package -Reinstall -ProjectName my_prj -Id EntityFramework.BulkInsert-ef6
hat sehr gut funktioniert.quelle
Für diejenigen, die hier ankommen, weil der Build-Server dies nicht tut, können Sie ein MSBuild-Ziel erstellen, auf dem der Befehl exec ausgeführt wird, um den Befehl nuget restore wie folgt auszuführen (in diesem Fall befindet sich nuget.exe im Ordner .nuget und nicht aktiviert den Pfad), der dann unmittelbar vor dem Erstellen der Lösung in einem TeamCity-Erstellungsschritt ausgeführt werden kann
quelle
Jetzt bietet Ihnen die Nuget Package Manager-Konsole in Visual Studio 2012 automatisch die Schaltfläche "Wiederherstellen", sobald ein Paket gefunden wird, das nicht installiert ist, sich jedoch in package.config befindet. Fantastisches Feature!
quelle
Wenn ich bei VS2012 V11 "-Reinstall" am Ende der Zeile verwende, funktioniert es nicht.
Also habe ich einfach benutzt:
quelle
Ich weiß, dass dies ein alter Beitrag ist, dachte aber, dass dies nützlich sein könnte. Wenn Sie bestimmte Pakete während des Aktualisierungsvorgangs ignorieren müssen (wie alle Pakete, die JavaScript-Referenzen aktualisieren), verwenden Sie das folgende PowerShell-Skript (stellen Sie sicher, dass Ihre Paketquelle in der Package Manager-Konsole auf "Alle" eingestellt ist):
BEARBEITEN 25.09.2014 10:55 EST - Ein Fehler im Skript wurde behoben
quelle
In Visual Studio 2017 - Wenn Sie mit IDE kompilieren - werden alle fehlenden Nuget-Pakete heruntergeladen und im Ordner "packages" gespeichert.
Auf der Build-Maschine wurde die Kompilierung jedoch mit msbuild.exe durchgeführt. In diesem Fall habe ich nuget.exe heruntergeladen.
Während jedes Erstellungsprozesses vor der Ausführung von msbuild.exe. Es wird ausgeführt -> nuget.exe wiederherstellen NAME_OF_SLN_File (wenn es nur eine .SLN-Datei gibt, können Sie diesen Parameter ignorieren).
quelle
MSbuild -t:restore Xxxx.sln
Ich weiß nicht seit wann, aber in VS2019 können Sie es einfacher machen:
quelle