Kennt jemand eine Möglichkeit, Visual Studio dazu zu bringen, die Konfiguration der NuGet-Paketquellen pro Lösung anstatt auf alle Lösungen anzuwenden? Ich habe immer wieder Probleme mit der Versionierung, weil ich an mehreren Projekten arbeite, die jeweils über eigene private NuGet-Repositorys verfügen. Es ist eine Qual, sich immer wieder daran zu erinnern, welches NuGet-Repo zu welchem Projekt gehört, und zurück zu gehen und das richtige auf das richtige Projekt anzuwenden.
visual-studio
nuget
BenAlabaster
quelle
quelle
Antworten:
TLDR: Ja
NuGet verwendet eine hierarchische Anwendung von Paketquellen, beginnend mit NuGet.config auf der Ebene Ihres Windows-Benutzerprofils, und wendet dann eine immer detailliertere Konfiguration an, beginnend am Stammverzeichnis des Dateipfads, der Ihre Lösung enthält, und endet schließlich mit dem Verzeichnis, das Ihre enthält Lösungsdatei.
Folgendes habe ich herausgefunden - mit freundlicher Genehmigung eines hilfreichen Twitterers, der mich auf dieses Dokument hinweist:
https://docs.nuget.org/consume/nuget-config-file
Wenn Sie die NuGet-Paketquellen in der
Tools > NuGet Package Manager > Package Manager Settings: Package Sources
Option von Visual Studio bearbeiten , werden diese Änderungen standardmäßig auf die Datei NuGet.config in Ihrem%APPDATA%\NuGet
Verzeichnis angewendet . Um diese Einstellungen pro Lösung (oder pro Lösungsgruppe) zu überschreiben, müssen Sie eine strategisch platzierte NuGet.config-Datei irgendwo auf dem Pfad Ihrer Lösung oder Lösungen hinzufügen.Wenn Sie das NuGet-Dokument lesen, wird alles klar. Mit der folgenden Lösung können Sie schnell eine Konfiguration für eine einzelne Visual Studio-Lösung angeben:
<?xml version="1.0" encoding="utf-8"?> <configuration> <packageRestore> <add key="enabled" value="True" /> <add key="automatic" value="True" /> </packageRestore> <activePackageSource> <add key="All" value="(Aggregate source)" /> </activePackageSource> <packageSources> <!-- Ditch all the Global NuGet package sources we only want a single private NuGet repo for this project --> <clear /> <!-- Add the private NuGet package source for this solution --> <add key="My Private NuGet Server" value="http://myprivatenuget.com:8080/nuget" /> </packageSources> <disabledPackageSources> <!-- Add any package sources to ignore here using the same keys as defined in the packageSources list above--> <!--<add key="nuget.org" value="true" />--> <add key="Microsoft and .NET" value="true" /> </disabledPackageSources> </configuration>
Wenn Sie möchten , eine Konfiguration auf mehrere Lösungen anzuwenden, sicherzustellen , dass Ihre Lösung Ordner alle in einem gemeinsamen Verzeichnis enthalten sind , und legen Sie die NuGet.config für die Paketquellen relevant für diese Lösungen in diesem gemeinsamen Verzeichnis gewährleistet, dass jede Lösung Ordner für bestimmte Projekte , die aren ‚t diese Paketquellen zu verwenden , die nicht in diesem gemeinsamen Ordner enthält.
quelle
<?xml version="1.0" encoding="utf-8"?> <configuration> <packageSources> <add key="MyCompanyPackageSource" value="\\server\NuGet\MyCompany" /> </packageSources> </configuration>
Ich möchte die hervorragende Antwort von BenAlabaster ergänzen . Ich hatte etwas das gegenteilige Problem:
Das Unternehmen hat seinen benutzerdefinierten privaten Nuget-Feed global für die Verwendung in allen Lösungen standardmäßig konfiguriert, und ich wollte mithilfe des öffentlichen Nuget-Feeds eine "Prototyp" -App erstellen .
Damit (im Verzeichnis dieser Lösung) ist der öffentliche Nuget-Feed nur für meine spezifische Lösung verfügbar, während der Feed des Unternehmens der Standard für alle anderen Lösungen bleibt:
<?xml version="1.0" encoding="utf-8"?> <configuration> <packageSources> <!-- Ditch all eventually upwards configured (private) feeds from an (enterprise) environment --> <clear /> <!-- Make sure we use the public nuget --> <add key="nuget.org" value="https://api.nuget.org/v3/index.json" protocolVersion="3" /> </packageSources> <packageRestore> <add key="enabled" value="True" /> <add key="automatic" value="True" /> </packageRestore> <bindingRedirects> <add key="skip" value="False" /> </bindingRedirects> <disabledPackageSources> <!-- Ditch all eventually upwards configured (private) feeds from an (enterprise) environment --> <clear /> </disabledPackageSources> </configuration>
Der Schlüssel bestand darin, alle nach oben deaktivierten Feeds zu löschen , da sie den öffentlichen Feed in ihrer NuGet.config in% APPDATA% \ NuGet absichtlich deaktiviert haben.
quelle