Sollte der Versionskontrolle ein .nuget-Ordner hinzugefügt werden?


107

Mit neueren Versionen von NuGet ist es möglich, ein Projekt so zu konfigurieren, dass NuGet-Pakete automatisch wiederhergestellt werden, sodass der packagesOrdner nicht in das Quellcode-Repository aufgenommen werden muss. Gut.

Dieser Befehl fügt jedoch einen neuen .nugetOrdner hinzu und dort befindet sich eine Binärdatei, NuGet.exe. Dies kann auch automatisch von Visual Studio neu erstellt werden, sodass es nicht richtig erscheint, dies zur Versionskontrolle hinzuzufügen. Ohne diesen Ordner lädt Visual Studio die Lösung jedoch nicht einmal ordnungsgemäß.

Wie geht ihr damit um? .Nuget zur Quellcodeverwaltung hinzufügen? Führen Sie ein Befehlszeilenskript aus, bevor Sie die Lösung öffnen.


Dies ist der authentischste Link docs.nuget.org/docs/workflows/… und da es sich um einen alten Thread handelt. Ich möchte nur die Informationen in dem Kommentar teilen ...
Naveed Butt

Antworten:


47

Dieser Beitrag ist alt, Sie sollten nicht mehr die NuGet-Paketwiederherstellung auf Lösungsebene verwenden. Ab Version 2.7+ gibt es im NuGet-Setup eine Option, um Pakete beim Erstellen automatisch wiederherzustellen. So kann der .nuget-Ordner gelöscht und die Option aus Ihren Projekten entfernt werden.

http://docs.nuget.org/docs/reference/package-restore

UPDATE: Mit der Veröffentlichung von NuGet 4.x und .NET Standard 2.0 können Sie bei Verwendung des neuen csproj-Formats jetzt Paketreferenzen verwenden und ironischerweise die Abhängigkeit von msbuild wieder herstellen, um Pakete wiederherzustellen. Jetzt sind Pakete jedoch ein erstklassiger Bürger von msbuild . Der obige Link erwähnt auch das PackageReference, aber die folgende Ankündigung beschreibt es besser:

https://blog.nuget.org/20170316/NuGet-now-fully-integrated-into-MSBuild.html

Und die NuGet 4.x RTM-Ankündigung, die ironischerweise nicht so nützlich ist:

https://blog.nuget.org/20170308/Announcing-NuGet-4.0-RTM.html

UPDATE 2: Anscheinend können Sie mit VS2017 sogar Paketreferenzen mit klassischen csproj-Projekten verwenden, diese sind jedoch nicht mehr abwärtskompatibel, und es gab einige Probleme beim Wiederherstellen von Paketunterabhängigkeiten. Ich bin sicher, dass alles gelöst sein wird.



@CAD Bloke, ja, das steht in der Leseliste unten, danke, dass Sie es eingegrenzt haben.
Jeremy

Sie können Nuget in VS einfach mit aktualisieren Tools > Extensions & Updates > Updates.
Jocull

47

Die Antwort von @Richard Szalay ist richtig - Sie müssen nuget.exe nicht festlegen. Wenn Visual Studio aus bestimmten Gründen die Datei nuget.exe nicht automatisch herunterlädt, stellen Sie sicher, dass in der Datei Folgendes auf true festgelegt istnuget.targets :

<!-- Download NuGet.exe if it does not already exist --> 
<DownloadNuGetExe Condition=" '$(DownloadNuGetExe)' == '' ">true</DownloadNuGetExe>

Schließen Sie die VS-Lösung, öffnen Sie sie erneut und erstellen Sie sie. Visual Studio sollte nuget.exe jetzt automatisch herunterladen.


Weiß übrigens jemand, warum es nicht truestandardmäßig eingestellt ist?
Ajukraine

2
Es ist eher ein Datenschutzproblem. "Der einfache Vorgang, eine Anfrage über das Internet zu stellen, kann Informationen über den Benutzer preisgeben (z. B. können wir anhand der IP-Adresse des Benutzers seinen Standort approximieren)." Siehe Artikel zur Wiederherstellung und Zustimmung von Paketen im Nuget-Blog
Gan

1
Zu Ihrer Information: Wenn NuGet.exe nicht im Ordner .nuget vorhanden ist, wird im Kontextmenü der Lösung "NuGet-Paketwiederherstellung aktivieren" angezeigt, obwohl die NuGet-Paketwiederherstellung bereits konfiguriert ist. Nach einem Build verschwindet die Option.
Comecme

Dies sollte die akzeptierte Antwort sein, IMO ... Wenn NuGet.exe sehr klein wäre, würde ich vielleicht sagen, stecken Sie es in die Quellcodeverwaltung und erledigen Sie alles, was Sie in Ihrer Ignorierdatei tun müssen. Aber es sind 1,5 Megabyte, das ist groß genug für mich, um es immer so zu machen, wie es Gan tut.
Brian MacKay

Wo wird das Formular nuget.exe heruntergeladen? Was ist, wenn mein Buildserver kein Internet hat?
Bitbonk


20

Sie müssen sich verpflichten .nuget\nuget.targets, aber nicht nuget.exe. Die Ziele werden die exe herunterladen , wenn es nicht vorhanden ist , so lange wie Sie ändern , DownloadNuGetExeum truein nuget.targets


4

Obwohl mir die Idee, Exe zur Quellcodeverwaltung hinzuzufügen, normalerweise nicht gefällt, würde ich vorschlagen, dass die Quellcodeverwaltung alles enthält, was zum Öffnen, Erstellen und Ausführen des Projekts erforderlich ist.

In diesem Fall scheint der Ordner .nuget eine erforderliche Abhängigkeit zu sein. Daher sollte es unter Quellcodeverwaltung sein.

Die einzige Frage, die Sie noch untersuchen müssen, ist, wie NuGet reagieren wird, wenn dieser Ordner als schreibgeschützt markiert ist. Dies wird TFS nach dem Einchecken tun.


Update: Ich habe etwas mehr darüber recherchiert, da ich NuGet noch nie benutzt habe. http://blog.davidebbo.com/2011/03/using-nuget-without-committing-packages.html

Ich würde vorschlagen, dass Sie NuGet wahrscheinlich zu einer Anforderung machen möchten, die auf jeder Entwicklerarbeitsstation installiert werden muss.

Außerdem sollten Sie die Batchdatei in die Quellcodeverwaltung einfügen, die erforderlich ist, um eine Workstation für die Bearbeitung des Projekts vorzubereiten. In der Batchdatei werden die Befehle ausgeführt, die zum Abrufen und Installieren der Abhängigkeitspakete erforderlich sind.

Darüber hinaus würde ich sagen, dass Sie NuGet direkt kontaktieren möchten, um sie zu fragen, wie genau dies funktionieren soll.


1
Ich dachte, dass <RestorePackages>true</RestorePackages>in der * .csproj-Datei genügend Informationen für Visual Studio enthalten sein sollten, aber vielleicht ist dies nicht der Fall.
Borek Bernard

1

Jetzt, da Nuget die Paketwiederherstellung unterstützt, sehen wir uns das genauer an.

Wir verwenden Subversion für die Quellcodeverwaltung, und meine ersten Gedanken sind, dass .nugetdies zu unserem Repository hinzugefügt werden sollte, aber mit svn: externals hinzugefügt werden sollte, damit es auf einen einzelnen Speicherort verweist.

Auf diese Weise können wir automatisch neue Versionen an alle Entwickler und Projekte senden. Für Projekte in Release-Zweigen anstelle von HEAD können wir die Revision der Referenz svn: externals angeben, wenn wir nuget in Ruhe lassen möchten.

Wir haben viele Projekte, daher bedeutet dies auch, dass nuget.exedas Repo nicht mehrmals dupliziert wird .


Ich konnte NuGet nicht dazu bringen, externe Projektpakete wiederherzustellen. Hat das für dich funktioniert?
Doguhan Uluca

Ja, obwohl NuGet.exe Probleme bei der Authentifizierung bei unserem lokalen Repo (IIS 6 + SSL + AD-Authentifizierung) zu haben scheint, während das Powershell- oder Erweiterungs-Plugin einwandfrei funktioniert.
Si618

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.