2015-11-20 11 views
29

Czy ktoś wie, w jaki sposób Visual Studio może zastosować konfigurację źródeł pakietów NuGet dla każdego rozwiązania zamiast wszystkich rozwiązań? Wciąż mam problemy z wersjami, ponieważ pracuję nad wieloma projektami, z których każdy ma swoje własne prywatne repozytoria NuGet. To brzemię w ***, aby pamiętać o tym, które repoo NuGet należy do którego projektu i powrócić i zastosować poprawny do właściwego projektu.Czy istnieje sposób na zrobienie ustawień źródła pakietów NuGet na rozwiązanie?

+0

Nie jesteś pewien co masz na myśli. Możesz konfigurować źródła pakietów nuget dla wszystkich rozwiązań. Plik package.config będzie zawierał wersje repozytoriów nuget, których potrzebuje Twój projekt. Nie aktualizuj automatycznie. czy możesz podać przykład tego, co chcesz zrobić. –

+1

@Shyamal Mówiłem o źródłach pakietów NuGet, a nie o samych pakietach ... Wymyśliłem, jak to zrobić. – BenAlabaster

Odpowiedz

58

TLDR: Tak

Nuget wykorzystuje hierarchiczną stosowanie źródeł pakietów począwszy od NuGet.config na poziomie profilu użytkownika systemu Windows, a następnie stosują coraz bardziej szczegółową konfigurację zaczynając od nasady ścieżką pliku, który zawiera twoje rozwiązanie, ostatecznie kończące się katalogiem zawierającym twój plik rozwiązania.

Więc oto co udało mi się dowiedzieć - dzięki uprzejmości pomocny Twitterer wskazując mnie do tego dokumentu:

https://docs.nuget.org/consume/nuget-config-file

Podczas edycji źródła pakietów Nuget w Tools > NuGet Package Manager > Package Manager Settings: Package Sources opcji Visual Studio, to dotyczy domyślnie zmienia się na plik NuGet.config znaleziony w katalogu %APPDATA%\NuGet. Aby zastąpić te ustawienia w zależności od rozwiązania (lub grupy rozwiązań), należy dodać strategicznie umieszczony plik NuGet.config gdzieś na ścieżce rozwiązania lub rozwiązań.

Wszystko stanie się jasne, jeśli czytasz ten dokument Nuget, rozwiązanie I dostarczyć poniżej szybko pozwalają określić konfigurację dla pojedynczej Wizualnej rozwiązania Studio:

  1. Przejdź do% appdata% \ Nuget i grab kopię pliku NuGet.config
  2. Zrzuć kopię w katalogu głównym rozwiązania - np. miejsce, w którym znajduje się Application.sln.
  3. Zastąp ustawienia domyślne zastosowane do profilu użytkownika, edytując kopię, tak aby zawierał tylko źródła pakietów NuGet, które są istotne dla tego rozwiązania - na przykład prywatne źródło NuGet, które zawiera zastrzeżone pakiety dla tego rozwiązania, ale nie powinno być stosowane do innych projektów - na przykład:
<?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 istotnych dla rozwiązania w tym wspólnym katalogu, zapewniając, że wszelkie foldery rozwiązań dla projektów, które są , nie są do korzystania z tych źródeł pakietów nie są zawarte w tym wspólnym folderze.

+10

Dzięki BenAlabaster. Jeśli chcesz zachować prostotę, możesz po prostu mieć plik zawierający: ' <źródło_pakietu> ' – Rubenisme

+7

Może być konieczne zamknięcie i ponowne otwarcie programu Visual Studio, aby zmiany zostały uwzględnione. Próbowałem zamknąć moje rozwiązanie, a to nie wystarczyło. – Jess

+0

Dzięki, oba dobre punkty – BenAlabaster

0

Chcę dodać do doskonałej odpowiedzi udzielonej przez BenAlabaster. Miałem nieco przeciwny problem:

Firma globalnie skonfigurowała swój niestandardowy kanał prywatny nuget do użytku we wszystkich rozwiązaniach domyślnie i chciałem stworzyć aplikację "prototypową", korzystając z public nuget feed.

Z tym (w katalogu tego rozwiązania), pasza Nuget publiczny jest dostępny tylko do mojego konkretnego rozwiązania, zachowując paszy firmy 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 kanałów w górę, ponieważ celowo wyłączyli oni publiczny kanał w swoim pliku NuGet.config w% APPDATA% \ NuGet.

Powiązane problemy