Ich habe für die meisten meiner Projekte die folgende Konvention:
/src
/Solution.sln
/SolutionFolder
/Project1
/Project2
/etc..
/lib
/Moq
moq.dll
license.txt
/Yui-Compressor
yui.compressor.dll
/tools
/ILMerge
ilmerge.exe
Sie werden bemerken , dass ich nicht halten externe Bibliotheken innerhalb der Quellordner. Ich bin auch sehr an der Verwendung von NuGet interessiert, möchte diese externen Bibliotheken jedoch nicht im Quellordner haben. Verfügt NuGet über eine Einstellung zum Ändern des Verzeichnisses, in das alle Pakete geladen werden?
.net
visual-studio
nuget
nuget-package
TheCloudlessSky
quelle
quelle
Antworten:
Es ist jetzt möglich zu steuern, in welchem Ordner die Pakete installiert werden.
http://nuget.codeplex.com/workitem/215
Bearbeiten: Siehe Phil Haacks Kommentar am 10. Dezember 2010 um 23:45 Uhr (im Arbeitselement / im obigen Link). Die Unterstützung ist teilweise in 1.0 implementiert, jedoch nicht dokumentiert.
Laut @dfowler: Fügen Sie eine nuget.config-Datei neben der Lösung hinzu:
Es gibt ein Nuget-Paket zum Erstellen der Überschreibung des Paketordners .
Update für Version 2.1
Wie Azat kommentierte, gibt es jetzt eine offizielle Dokumentation zur Steuerung der Paketpositionen. In den Versionshinweisen für 2.1 wird die folgende Konfiguration in einer Datei nuget.config angegeben (eine Beschreibung der gültigen Speicherorte für die Konfigurationsdateien und der Funktionsweise des hierarchischen Konfigurationsmodells finden Sie in den Versionshinweisen):
Dies würde den Paketordner für die Konfigurationsebene ändern, in der Sie die Datei abgelegt haben (Lösung, wenn Sie sie im Lösungsverzeichnis ablegen, Projekt im Projektverzeichnis usw.). Beachten Sie, dass in den Versionshinweisen Folgendes angegeben ist:
quelle
das hat bei mir NICHT funktioniert:
das hat bei mir funktioniert:
quelle
Okay, für alle anderen, die diesen Beitrag lesen - hier ist, was ich von den unzähligen Antworten oben verstehe:
Die Datei nuget.config im Ordner .nuget ist relativ zu diesem Ordner. Dies ist wichtig, denn wenn Ihr neuer Ordner so etwas wie "../Packages" ist, wird er dort abgelegt, wo er immer sofort einsatzbereit ist. Wie @ bruce14 angibt, müssen Sie stattdessen '../../Packages' ausführen
Ich konnte das neueste Nuget (2.8.5) nicht dazu bringen, einen Paketordner außerhalb des Standardverzeichnisses zu finden, ohne die Paketwiederherstellung zu aktivieren. Sobald Sie die Paketwiederherstellung aktiviert haben, sollte der Datei nuget.config im Ordner .nuget Folgendes hinzugefügt werden, um den Speicherort zu ändern:
(Dies ist wichtig.) Wenn Sie Änderungen am Speicherort des Paketordners in den Dateien nuget.config vornehmen, müssen Sie Visual Studio neu starten oder die Lösung schließen / neu laden, damit die Änderungen wirksam werden
quelle
Eine Lösung für Nuget 3.2 unter Visual Studio 2015 lautet:
Verwenden eines Schrägstrichs für den übergeordneten Ordner. Speichern Sie die obige Datei (nuget.config) im Lösungsordner.
Referenz finden Sie hier
quelle
../lib
Das ist ein Schrägstrich, kein Schrägstrich. Was meinst du?Die in den Versionshinweisen für 2.1 vorgeschlagene Lösung funktioniert nicht sofort. Sie haben vergessen zu erwähnen, dass es Code gibt:
was verhindert, dass es funktioniert. Um dies zu beheben, müssen Sie Ihre NuGet.targets-Datei ändern und den Parameter 'OutputDirectory' entfernen:
Wenn Sie nun irgendwo in NuGet.config die Konfiguration 'repositoryPath' hinzufügen (eine Beschreibung der gültigen Speicherorte für die Konfigurationsdateien finden Sie in den Versionshinweisen), werden alle Pakete an einem einzigen Speicherort wiederhergestellt, aber ... Ihre .csproj-Datei enthält Hinweise zu Assemblys, die als relative Pfade geschrieben wurden ...
Ich verstehe immer noch nicht, warum sie sich schwer getan haben, anstatt PackageManager zu ändern, damit es Hinweispfade relativ zu PackagesDir hinzufügt. Auf diese Weise habe ich manuell verschiedene Paketspeicherorte lokal (auf meinem Desktop) und auf dem Build Agent.
quelle
Wenn Sie zusätzlich zur Antwort von Shane Kms die Nuget-Paketwiederherstellung aktiviert haben, bearbeiten Sie die NuGet.config im Ordner .nuget wie folgt:
Beachten Sie das zusätzliche ".. \", da es vom .nuget-Ordner und nicht vom Lösungsordner zurückverfolgt wird.
quelle
Keine dieser Antworten hat bei mir funktioniert (Nuget 2.8.6), da einige Tipps fehlen. Ich werde versuchen, sie hier hinzuzufügen, da dies für andere nützlich sein könnte.
Nach dem Lesen der folgenden Quellen:
https://docs.nuget.org/consume/NuGet-Config-Settings
https://github.com/NuGet/Home/issues/1346
Es scheint, dass
Z.B
Sie können auch den NuGet-Befehl verwenden, um sicherzustellen, dass die Syntax wie folgt korrekt ist:
quelle
Für .NET Core-Projekte und Visual Studio 2017 konnte ich alle Pakete auf dem relativen Pfad wiederherstellen, indem ich folgende Konfiguration bereitstellte:
Aufgrund meiner Erfahrung wurde der lib-Ordner auf derselben Ebene erstellt, auf der Nuget.config gefunden wurde, unabhängig davon, wo sich die sln-Datei befand. Ich habe getestet und das Verhalten ist für die Befehlszeilen-Dotnet-Wiederherstellung und die Wiederherstellung von Visual Studio 2017 gleich
quelle
globalPackagesFolder
Schlüssel auf den Paketordner meines Projekts gesetzt. Ich habe versucht, ein einzelnes Paket mit hinzuzufügendotnet add package MyPackage
.nuget.exe
hat das gesamte Framework von 83 .NET-Paketen in diesen Ordner heruntergeladen. Das habe ich nicht beabsichtigt. Ich wollte nur mein einzelnes MyPackage in meinem lokalen, quellengesteuerten Paketordner haben.Die Konfigurationsdatei in der akzeptierten Antwort funktioniert für mich in VS2012. Bei mir funktioniert es jedoch nur, wenn ich Folgendes mache:
Wenn ich diese Schritte befolge, kann ich einen freigegebenen Paketordner verwenden.
quelle
Um den Pfad für Projekte mit PackageReference anstelle von packages.config zu ändern, müssen Sie verwenden
globalPackagesFolder
Von https://docs.microsoft.com/en-us/nuget/reference/nuget-config-file
Ich habe Nuget.config neben meine Lösungsdatei gestellt und es hat funktioniert.
quelle
Noch ein kleiner Leckerbissen, den ich gerade entdeckt habe. (Dies mag so einfach sein, dass einige es nicht erwähnt haben, aber es war wichtig für meine Lösung.) Der Ordner "packages" befindet sich im selben Ordner wie Ihre SLN-Datei.
Wir haben unsere .sln-Datei verschoben und dann alle Pfade darin korrigiert, um die verschiedenen Projekte und voila zu finden! Unser Paketordner landete dort, wo wir ihn haben wollten.
quelle
UPDATE für VS 2017:
Es sieht so aus, als hätten die Leute im Nuget-Team endlich angefangen, Nuget selbst zu verwenden, was ihnen half, einige wichtige Dinge zu finden und zu reparieren. Jetzt (wenn ich mich nicht irre, da ich immer noch nicht auf VS 2017 migriert bin) ist das Folgende nicht mehr notwendig. Sie sollten in der Lage sein, den "repositoryPath" auf einen lokalen Ordner zu setzen, und es wird funktionieren. Sogar Sie können es überhaupt belassen, da der Wiederherstellungsspeicherort standardmäßig aus den Lösungsordnern auf Computerebene verschoben wurde. Wieder - ich habe es immer noch nicht alleine getestet
VS 2015 und früher
Nur ein Tipp zu anderen Antworten (speziell dies ):
Der Speicherort des NuGet-Paketordners kann über die Konfiguration geändert werden. VisualStudio verweist jedoch weiterhin relativ relativ auf Assemblys in diesem Ordner:
Um dies zu umgehen (bis zu einer besseren Lösung), habe ich den Befehl subst verwendet , um ein virtuelles Laufwerk zu erstellen, das auf einen neuen Speicherort des Ordners "Pakete" verweist:
Wenn Sie nun ein neues NuGet-Paket hinzufügen, verwendet die Projektreferenz ihren absoluten Speicherort:
Hinweis:
quelle
<HintPath>$(SolutionDir)\packages\SomeAssembly\lib\net45\SomeAssembly.dll</HintPath>
anstatt zu verwendensubst
Nur mit Nuget 2.8.3 aktualisieren. Um den Speicherort der installierten Pakete zu ändern, habe ich die Paketwiederherstellung über die Rechtsklick-Lösung aktiviert. NuGet.Config bearbeitet und folgende Zeilen hinzugefügt:
Anschließend wurde die Lösung neu erstellt, alle Pakete in den gewünschten Ordner heruntergeladen und die Referenzen automatisch aktualisiert.
quelle
Der konsistenteste Weg ist über die
nuget config
korrekte Einstellung der Konfiguration:https://docs.microsoft.com/en-us/nuget/consume-packages/configuring-nuget-behavior#changing-config-settings
quelle