NuGet – pobieranie pakietów z własnego serwera

Pewnego razu rozwijając swoją aplikację, postanowiłem wydzielić sobie pewną logikę do zewnętrznych bibliotek, aby móc z niej korzystać w innych rozwiązaniach. Utworzyłem projekt, skonfigurowałem budowę paczek nugetowych, zarejestrowałem się w MyGet z poziomu portalu Azure, opublikowałem pierwsze pakiety. W końcu je zainstalowałem w projekcie (dodając feed przez Visual Studio) i udało mi się poprawnie zbudować solucję.

Wszystko działało super do momentu, gdy chciałem wykonać pierwsze automatyczne wdrożenie aplikacji na Azure, kiedy to okazało się, że zadanie wdrożenia nie może się zakończyć z powodzeniem. Powód był całkiem prozaiczny: automat nie wiedział, skąd ma pobrać pakiet. Rozwiązanie problemu w dalszej części wpisu.

Jeśli posiadamy własny serwer NuGet na pewno chcielibyśmy, aby dla naszego rozwiązania można było skonfigurować listę źródeł pakietów. Dzięki czemu nie będziemy musieli jej ręcznie konfigurować na nowym stanowisku oraz w narzędziach Continuous Integration. Zastosowana metoda pozwala też na pobranie pakietów z własnych serwerów NuGet przez slot wdrażania dla aplikacji webowej Azure.

W tym celu należy skonfigurować własną dedykowaną dla projektu listę kanałów NuGet, z wykorzystaniem pliku NuGet.config. Jeśli go nie mieliśmy do tej pory, to tworzymy go w katalogu, w którym znajduje się solucja naszego projektu w Visual Studio.

Najprostsza forma jaką powinien przyjąć plik, jeśli korzystamy z usług MyGet:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
<packageSources>
<add key="nuget.org" value="https://www.nuget.org/api/v2/" />
<add key="nazwa-feeda" value="https://www.myget.org/f/nazwa-feeda/" />
</packageSources>
</configuration>

Plik oczywiście dodajemy do repozytorium, w którym wersjonujemy swój projekt.

Więcej na temat pliku NuGet.config znajdziecie w dokumentacji NuGet.