Gibt es eine Möglichkeit, nuget.exe im Ordner .nuget automatisch zu aktualisieren, wenn die Paketwiederherstellung verwendet wird?

92

Mein Team verwendet seit Nuget 1.5 die Option "Paketwiederherstellung aktivieren", um Pakete von unserer Quellcodeverwaltung fernzuhalten. Als Nuget 1.6 veröffentlicht wurde, stellten wir ein Problem fest, bei dem die Pakete nicht heruntergezogen wurden, und verfolgten es bis zur Datei Nuget.exe im Ordner .nuget, die auf 1.6 aktualisiert werden musste, um mit dem Paketmanager übereinzustimmen.

Was ist der beste Weg, um eine Lösung zu aktualisieren, nachdem Nuget udpated wurde? Ich sehe keinen einfachen Weg aus dem Studio, um festzustellen, welche Version von Nuget sich im Lösungsordner befindet. Bisher haben wir den Ordner .nuget weggeblasen und den Befehl Enable Package Restore erneut ausgeführt.

Rick
quelle

Antworten:

148

Ich würde vorschlagen, .nuget \ nuget.exe mit diesem Befehl über die Befehlszeile zu aktualisieren:

nuget.exe update -self

[BEARBEITEN]: Schließen Sie zuerst VS Solution. Wenn es ein Update gibt und die Lösung geöffnet wird, wird nuget.exe aus der Lösung entfernt.

Sie könnten automatisch nuget.exe aktualisieren auf wiederherstellen , indem Sie die .nuget \ nuget.targets Ändern Sie den obigen Befehl hinzuzufügen. Ich würde mir den Wiederherstellungsbefehl dort als Beispiel ansehen. Aber ich bin mir nicht sicher, ob es sich lohnt. Nuget.exe-Updates sind nicht so häufig und die Abwärtskompatibilität sollte sehr selten unterbrochen werden.

Alexandre Dion
quelle
Ich habe das bei einem meiner Projekte versucht. Es hat NuGet.exe aktualisiert, aber es schien es aus meiner Lösung entfernt zu haben. Ich weiß, dass ich es wieder hinzufügen kann, aber das schien seltsam.
Rick
Ah richtig, ich habe dieses Mal ein echtes Update versucht und nuget.exe wurde auch für mich aus der VS-Lösung entfernt. (Das habe ich vorher nicht bekommen, da nuget.exe auf dem neuesten Stand war). Dies liegt daran, dass während des Updates die aktuelle Datei nuget.exe zuerst in die Datei nuget.exe.old verschoben wird, sodass die Dateireferenz beschädigt wird. Ich bezweifle, dass dies behoben wird. Ich würde den Befehl mit geschlossener Lösung ausführen.
Alexandre Dion
Es scheint, als würde Ihnen das Selbstupdate keine neue NuGet.targets-Datei geben, was ein Problem sein könnte. Ich denke, das NuGet-Team hat zwischen Version 1.6 und 1.7 einige Änderungen an der Zieldatei vorgenommen.
William Gross
@ William Gross gut, Sie könnten überprüfen, ob es ein Update für nuget.org/packages/NuGet.Build gab (das ist das Paket, das nuget.targets enthält)
Alexandre Dion
arbeitete für mich, denken Sie daran, die cmd als Administrator auszuführen
Mohammad
31

Ich habe festgestellt, dass der beste Weg, dies zu handhaben, darin besteht, einfach den Ordner .nuget zu löschen und die lösungsweite Paketwiederherstellung wieder zu aktivieren. Wie oben erwähnt, können Sie Ihrem Build einen Selbstaktualisierungsbefehl hinzufügen, der jedoch die Ziele oder Konfigurationsdateien nicht aktualisiert, wenn zwischen den Versionen Änderungen vorgenommen werden (oder die Referenz aus Ihrer Lösung entfernt wird). Vielleicht ist es keine so große Sache, aber dies ist der sichere Weg, um sicherzustellen, dass Sie die neuesten Exe- und Konfigurationsdateien haben. Letztendlich ist das Aktualisieren nur dann ein Problem, wenn Sie Zugriff auf einen neuen Befehl benötigen oder wenn sich in einer neuen Version eine Änderung ändert.

Chris Kirby
quelle
3
+1 - Ich habe festgestellt, dass dies der beste Weg ist, um Updates sowohl für die Datei NuGet.exe als auch für die NuGet.targetsDatei zu erhalten (was ebenfalls wichtig ist). NuGet.targetsStellen Sie einfach sicher, dass Sie alle Anpassungen speichern, die Sie an der Datei vorgenommen haben (z. B. benutzerdefinierte PackageSources), damit Sie sie erneut auf die neue Datei anwenden können.
Jesse Webb
toll, das hat bei mir wie Charme geklappt !! Danke für die Information
Gayan
-3

Siehe David Ebbos Beitrag in seinem Blog

Grundsätzlich müssen Sie lediglich eine NuGet.Config-Datei neben Ihrer SLN-Datei erstellen, die Folgendes enthält:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <packageSources>
    <clear/>
    <add key="nuget.org" value="https://www.nuget.org/api/v2/" />
    <add key="aspnetwebstacknightlyrelease" value="https://www.myget.org/f/aspnetwebstacknightlyrelease/" />
  </packageSources>
</configuration>
Rodolpho Brock
quelle
1
In der Frage wird gefragt, wie nuget.exe bei Verwendung der Paketwiederherstellung automatisch auf die neueste Version aktualisiert werden soll. Der Blog-Beitrag von David Ebbo erklärt nur, wie Pakete mit nuget.exe wiederhergestellt werden.
Frith
Sie sollten wahrscheinlich angeben, welchen Teil der Frage Sie dann beantworten. Wenn Sie sich den Titel der Frage und die akzeptierte Antwort ansehen, ist es leicht, diese Antwort als falsch zu betrachten ...
Jens