Czy ktoś wie, jak sprawić, by program Visual Studio zastosował konfigurację źródeł pakietów NuGet na rozwiązanie zamiast we wszystkich rozwiązaniach? Ciągle mam problemy z wersjonowaniem, ponieważ pracuję nad wieloma projektami, z których każdy ma własne prywatne repozytoria NuGet. Uciążliwe jest ciągłe pamiętanie, które repozytorium NuGet należy do którego projektu i cofanie się i stosowanie poprawnego do właściwego projektu.
visual-studio
nuget
BenAlabaster
źródło
źródło
Odpowiedzi:
TLDR: tak
NuGet używa hierarchicznej aplikacji źródeł pakietów, zaczynając od NuGet.config na poziomie profilu użytkownika systemu Windows, a następnie stosując coraz bardziej szczegółową konfigurację, zaczynając od katalogu głównego ścieżki pliku zawierającej rozwiązanie, a na końcu kończąc na katalogu zawierającym plik rozwiązania.
Oto, co udało mi się rozgryźć - dzięki uprzejmości pomocnego Twitterera wskazującego mi ten dokument:
https://docs.nuget.org/consume/nuget-config-file
Podczas edytowania źródeł pakietów NuGet w opcji programu Visual Studio
Tools > NuGet Package Manager > Package Manager Settings: Package Sources
te zmiany są domyślnie stosowane do pliku NuGet.config znajdującego się w%APPDATA%\NuGet
katalogu. Aby zastąpić te ustawienia dla poszczególnych rozwiązań (lub grup rozwiązań), należy dodać strategicznie umieszczony plik NuGet.config w dowolnym miejscu na ścieżce rozwiązania lub rozwiązań.Wszystko stanie się jasne, jeśli przeczytasz dokument NuGet, rozwiązanie, które podaję poniżej, pozwoli szybko określić konfigurację dla pojedynczego rozwiązania Visual Studio:
<?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>
Jeśli chcesz konfiguracja zastosować do wielu rozwiązań, zapewniają rozwiązanie foldery są wszystkie zawarte w ramach wspólnego katalogu i umieścić NuGet.config dla źródeł pakietów odpowiednich dla tych rozwiązań w tym wspólnym katalogu, zapewniając, że wszelkie foldery rozwiązanie dla projektów, które aren „t do korzystania z tych źródeł pakietów nie są zawarte w niniejszym wspólnym folderze.
źródło
<?xml version="1.0" encoding="utf-8"?> <configuration> <packageSources> <add key="MyCompanyPackageSource" value="\\server\NuGet\MyCompany" /> </packageSources> </configuration>
Chcę dodać do doskonałej odpowiedzi udzielonej przez BenAlabaster . Miałem nieco odwrotny problem:
Firma globalnie skonfigurowała swój niestandardowy prywatny kanał nuget do użytku we wszystkich rozwiązaniach domyślnie, a ja chciałem utworzyć „prototypową” aplikację przy użyciu publicznego źródła nuget .
Dzięki temu (w katalogu tego rozwiązania) publiczny kanał nuget jest dostępny tylko dla mojego konkretnego rozwiązania, zachowując kanał firmy jako domyślny dla wszystkich innych rozwiązań:
<?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>
Kluczem było wyczyszczenie wszystkich wyłączonych źródeł danych w górę , ponieważ celowo wyłączyli publiczny kanał informacyjny w swoim NuGet.config w% APPDATA% \ NuGet.
źródło