Kiedy pracujemy nad nieco bardziej złożonymi bibliotekami, które będziemy rozprowadzać w postaci paczek NuGet to warto je również w tej postaci konsumować lokalnie. W przypadku pojedyńczej maszyny wystarczy wyznaczyć pewien folder i zarejestrować go jako źródło w pliku nuget.config
. W moim przypadku mam projekt, który muszę kompilować na Windowsie i chcę konsumować na maszynie z Linuxem, ale nie chcę kopiować paczek przez SMB. Wobec tego można pokusić się o lokalny server NuGet.
Tworzenie serwera
Przejdziemy po prędce przez instrukcje z dokumentacji NuGet.Server:
- Utwórz nowy pusty projekt klasycznego ASP.NET na .NET Framework 4.6
- Dodaj paczkę
NuGet.Server
- Uruchom (IIS Express), zobacz powitalną stronę
- Skopiuj swoje paczki NuGet do folderu
Packages
w projekcie
Możesz się teraz lokalnie podłączyć do tego źródła i konsumować paczki. Zobaczysz, że pliku .nupkg
zostały przeniesione do folderów wewnątrz Packages
, a metadane zostały z nich wyciągnięte do szybkiej konsumpcji.
Dostęp w sieci lokalnej
Nie jestem pewien czy to konieczny krok, ale ja zezwoliłem na połączenia przychodzące po porcie http dla IIS Express w Firewallu (Inbound Rules > New Rule > Port).
No i teraz łącząc się z maszyny z Linuxem zobaczyłem błąd 400 The request hostname is invalid. Dzieje się tak, ponieważ domyślnie IIS Express jest skonfigurowany by tylko przyjmować połączenia lokalne. Wobec tego musimy znaleźć jego plik applicationhost.config
, który znajduje się w .vs\<projekt>\config\
i w sekcji sites
> bindings
zastąpić:
<binding protocol="http" bindingInformation="*:<port>:localhost" />
<binding protocol="http" bindingInformation="*:<port>:*" />
Voila, można dodać nowe źródło do nuget.config
na maszynie w sieci lokalnej i zrobić dotnet restore
żeby pociągnąć paczki. Jeśli chcemy paczki zmienić, to należy usunąć foldery w Packages
naszego serwera, skopiować tam nowe paczki, a na maszynie docelowej wyczyścić cache dotnet nuget locals http-cache -c
oraz usunąć z ~/.nuget/packages
, żeby kolejny Restore ponownie je pobrał.
Jeśli VisualStudio marudzi z IISExpress, to można uruchomić go ręcznie:
& "C:\Program Files (x86)\IIS Express\iisexpress.exe" /config:path\to\applicationhost.config /siteid:2
Tutaj siteid
to id z pliku konfiguracyjnego <site id="X">
który zmodyfikowaliśmy.