Zarządzanie i wykrywanie wersji .NET stanowi kluczowy aspekt nowoczesnego rozwoju oprogramowania, zwłaszcza gdy organizacje utrzymują wiele projektów wykorzystujących różne wersje platformy oraz wdrażają je w zróżnicowanych środowiskach. Zrozumienie skutecznych metod sprawdzania, zarządzania i kontroli wersji .NET przy pomocy narzędzi linii poleceń staje się coraz ważniejsze wraz z ewolucją ekosystemu .NET – od .NET Framework, przez .NET Core, aż po nowoczesny .NET. Poniżej znajdziesz przegląd narzędzi i technik służących wykrywaniu wersji, ich przeznaczenia oraz mechanizmów kontroli wersji:

  • podstawowe polecenia do zarządzania wersjami: dotnet --version, dotnet --info, dotnet --list-sdks, dotnet --list-runtimes oraz dotnet sdk check,
  • każde z tych poleceń spełnia inną funkcję i odpowiada na inne potrzeby deweloperów,
  • znajomość działania tych narzędzi jest niezbędna do efektywnej pracy w złożonych środowiskach .NET.

Podstawowe polecenia do wykrywania wersji

Interfejs linii poleceń .NET CLI oferuje kilka kluczowych komend pozwalających szybko i precyzyjnie wykrywać oraz analizować wersje zainstalowanego środowiska:

  • dotnet –version – wyświetla aktywną wersję SDK, na której będą działać polecenia CLI .NET;
  • dotnet –info – szczegółowy raport o instalacji .NET, wersji systemu operacyjnego, architekturze, identyfikatorze środowiska RID oraz wszystkich środowiskowych parametrach istotnych dla działania aplikacji;
  • dotnet –list-sdks – wykazuje wszystkie zainstalowane wersje SDK wraz ze ścieżkami instalacyjnymi;
  • dotnet –list-runtimes – prezentuje listę środowisk uruchomieniowych na komputerze, co umożliwia ocenę pełnej kompatybilności dla wdrożenia aplikacji;
  • dotnet sdk check – informuje, które wersje SDK i runtime są aktualne oraz ostrzega o braku wsparcia dla wybranych instalacji.

Jeżeli chcesz zweryfikować, czy .NET CLI jest zainstalowane i dostępne, otwórz terminal i wpisz dotnet. W odpowiedzi otrzymasz przegląd najważniejszych funkcji (opcje --help, --info, --list-sdks, --list-runtimes), co potwierdza prawidłową instalację narzędzia oraz dostępność na ścieżce systemowej PATH.

Polecenie dotnet --version stanowi podstawę pracy każdego dewelopera, pozwalając łatwo sprawdzić, która wersja SDK będzie wykorzystywana podczas budowania, uruchamiania i generowania nowych projektów. Warto pamiętać, że wynik polecenia może być zmodyfikowany przez obecność pliku global.json w bieżącym katalogu lub katalogach nadrzędnych – co zwiększa kontrolę wersji, lecz wymaga świadomości mechanizmu wyboru wersji przez CLI .NET.

Z kolei polecenie dotnet --info dostarcza najpełniejszy przegląd środowiska, ułatwiając diagnostykę oraz rozwiązywanie problemów związanych z konfiguracją systemu, ścieżkami instalacyjnymi i zgodnością wersji. To narzędzie powinno być pierwszym wyborem przy analizie złożonych systemów lub problemów z uruchomieniem aplikacji .NET.

Zrozumienie zarządzania wersjami SDK a Runtime

Kluczowym elementem zarządzania środowiskiem .NET jest rozróżnienie między SDK a środowiskiem uruchomieniowym (runtime):

  • SDK (Software Development Kit) zawiera komplet narzędzi deweloperskich: kompilatory, szablony projektów oraz komendy CLI,
  • Runtime oferuje tylko niezbędne składniki do uruchamiania aplikacji .NET bez narzędzi deweloperskich,
  • takie rozdzielenie pozwala na elastyczne wdrożenia: na produkcji można instalować wyłącznie samo runtime, a u programistów pełne SDK.

Polecenie dotnet --list-sdks umożliwia sprawdzenie wszystkich obecnych na maszynie zestawów SDK wraz ze ścieżkami instalacji, co jest istotne zwłaszcza podczas rozwiązywania problemów z niezgodnością wersji lub przy obsłudze wielu projektów równocześnie.

Lista środowisk uruchomieniowych dostępna dzięki dotnet --list-runtimes pozwala ocenić kompatybilność wdrożeniową oraz zaplanować wymagane instalacje na serwerach produkcyjnych.

Najważniejsze zależności dla skutecznego zarządzania wersjami przedstawia poniższa lista:

  • instalacja SDK zawiera zgodne runtime, co pozwala zarówno budować, jak i uruchamiać aplikacje,
  • w środowisku produkcyjnym instaluje się najczęściej wyłącznie wymagane środowiska runtime,
  • wielowersyjność środowiska umożliwia jednoczesne wspieranie starszych i nowych aplikacji.

Mechanizm wyboru runtime przez hosta .NET oparty jest na ściśle określonych regułach wyszukiwania i kontrolowanym „roll-forward”, co pozwala na płynne przejścia pomiędzy wersjami, minimalizując ryzyko niekompatybilności.

Zarządzanie wieloma instalacjami .NET

Nowoczesne środowiska deweloperskie wymagają obsługi wielu wersji SDK i runtime jednocześnie, co niesie za sobą określone wyzwania oraz wymaga wykorzystania wszystkich dostępnych narzędzi i znajomości ścieżek instalacyjnych:

  • łatwe przełączanie się pomiędzy wersjami .NET,
  • weryfikacja aktualności za pomocą dotnet sdk check,
  • świadoma kontrola nad strukturą katalogów instalacyjnych SDK i runtime,
  • identyfikacja konfliktów instalacyjnych oraz zarządzanie zmienną środowiskową PATH.

Przykładowa lokalizacja SDK na Windowsie to C:\Program Files\dotnet\sdk. W środowiskach Linux oraz macOS ścieżki uzależnione są od sposobu instalacji, co wymaga ich świadomej kontroli.

Jednym z najczęstszych problemów jest konflikt pomiędzy wersjami instalowanymi przez Visual Studio a instalacjami ręcznymi. Może to prowadzić do sytuacji, w której dotnet --list-sdks nie wykazuje żadnych instalacji pomimo ich fizycznej obecności. Rozwiązaniem zazwyczaj jest modyfikacja PATH lub jednolita reinstalacja .NET.

Kontrola wyboru wersji za pomocą global.json

Precyzyjne kontrolowanie wyboru SDK na potrzeby konkretnego projektu umożliwia plik global.json. Oto najważniejsze aspekty stosowania tego mechanizmu:

  • umożliwia jednoznaczne wskazanie wersji SDK używanej przez CLI .NET w danym katalogu,
  • stosuje się hierarchiczne przeszukiwanie (bieżący katalog oraz katalogi nadrzędne),
  • obsługuje reguły roll-forward, pozwalające zarządzać zachowaniem przy braku określonej wersji SDK.

Właściwość rollForward w pliku global.json może przyjąć wartości takie jak: latestPatch, latestFeature, latestMinor, latestMajor, disable. Domyślnie jest to latestPatch, co pozwala na korzystanie z najnowszych poprawek w obrębie głównej wersji SDK.

Plik global.json można utworzyć ręcznie lub wygenerować poleceniem:

dotnet new globaljson --sdk-version {wersja}

Dzięki temu zapewniasz powtarzalność i przewidywalność procesów, szczególnie podczas automatyzacji (CI/CD) i w zespołach, gdzie spójność środowisk jest kluczowa.

Zaawansowane zarządzanie wersjami i rozwiązywanie problemów

W złożonych środowiskach oraz podczas utrzymania wielu projektów mogą pojawiać się konflikty oraz problemy diagnostyczne. Do najważniejszych z nich należą:

  • konflikty ścieżek i wielokrotne instalacje SDK lub runtime,
  • konieczność użycia zmiennej środowiskowej DOTNET_ROOT do wskazywania niestandardowych katalogów instalacyjnych,
  • niezamierzony „roll-forward” lub błędy podczas wyboru środowiska uruchomieniowego,
  • brak kompatybilności, wymagający ręcznej instalacji określonych wersji SDK lub runtime.

Rozwiązywanie problemów powinno opierać się na analizie wyników poleceń diagnostycznych dotnet --version, dotnet --info, dotnet --list-sdks oraz dotnet --list-runtimes, co pozwala szybko zlokalizować rozbieżności w konfiguracji systemu, błędy w zmiennych środowiskowych lub efekty działania pliku global.json.

Automatyzacja tego procesu będzie wspierana przez rozwijane narzędzia, takie jak planowany strukturalny dotnet info w formacie JSON.

Najważniejsze praktyki i wyzwania w zarządzaniu wersjami .NET:

  • znajomość działania mechanizmów wyboru wersji oraz hierarchii katalogów,
  • umiejętność identyfikacji oraz rozwiązywania konfliktów między instalacjami Visual Studio a CLI,
  • świadome korzystanie z pliku global.json do gwarantowania spójności środowisk,
  • stosowanie poleceń CLI do regularnej weryfikacji oraz aktualizacji wersji narzędzi.