Współczesne środowisko rozwoju oprogramowania .NET wymaga elastycznego zarządzania wersjami SDK, szczególnie przy równoległym korzystaniu z wersji Preview i stabilnych. Ekosystem .NET umożliwia instalację i zarządzanie wieloma wersjami SDK 8, 9 i 10 jednocześnie, gwarantując izolację projektów i stabilne środowisko deweloperskie. Kluczową rolę odgrywa mechanizm Side-by-Side (SxS), który pozwala na współistnienie różnych wersji SDK bez konfliktów oraz system konfiguracji global.json, umożliwiający precyzyjne określenie wymaganej wersji dla konkretnego projektu. Wersje Preview wymagają szczególnej synchronizacji z wersjami Visual Studio, co przekłada się na spójność środowiska IDE i SDK. Nowe funkcjonalności .NET 10 Preview 3, takie jak lokalne instalacje SDK przez ścieżki w global.json, znacząco upraszczają zarządzanie SDK w repozytoriach, minimalizując wpływ zmian na konfigurację globalną systemu.
Podstawy zarządzania wersjami SDK w .NET
Prawidłowe zarządzanie wersjami .NET SDK to fundament stabilnego i przewidywalnego środowiska deweloperskiego, ważnego zwłaszcza dla zespołów realizujących wieloprojektowe wdrożenia o złożonym cyklu życia.
W .NET SDK stosowany jest precyzyjny schemat numeracji – pierwsza liczba odpowiada wersji .NET Runtime, który jest dołączany i domyślnie targetowany. Dzięki temu zachowana jest pełna transparentność i zgodność pomiędzy SDK a środowiskiem uruchomieniowym.
.NET CLI domyślnie wybiera najnowszą zainstalowaną wersję SDK, niezależnie od wersji runtime, którą targetuje projekt. Takie podejście przyspiesza wdrażanie nowoczesnych narzędzi przy jednoczesnej obsłudze starszych frameworków.
W wielu przypadkach wymagane jest jednak określenie konkretnej wersji SDK – służy do tego plik global.json. Selekcja SDK przebiega według poniższych zasad:
- dotnet wyszukuje plik global.json od bieżącego katalogu w górę drzewa katalogów,
- gdy znajdzie pierwszy plik, używa w nim zadanej wersji SDK,
- jeśli nie znajdzie pliku, wykorzystuje najnowsze SDK dostępne w systemie.
Kolejnym ważnym aspektem jest feature band, synchronizujący wersjonowanie kwartalne Visual Studio i SDK, co gwarantuje spójność środowisk narzędziowych – szczególnie przy pracy z wersjami Preview.
Mechanizmy side-by-side w .NET
Architektura Side-by-Side (SxS) w .NET umożliwia instalację i działanie wielu wersji SDK na jednej maszynie bez konfliktów, zapewniając niezależność poszczególnych projektów i środowisk.
Wersje SDK na Windows domyślnie instalują się w hierarchii C:\Program Files\dotnet\sdk, każda w odrębnym podkatalogu, co zapewnia jednoznaczność i łatwość zarządzania.
Podczas uruchamiania polecenia dotnet –version, system automatycznie wybierze właściwą wersję w zależności od lokalizacji oraz plików konfiguracyjnych, takich jak global.json.
Obsługa architektur, w tym ARM64, realizowana jest poprzez dedykowane foldery Program Files\dotnet\x64 (dla wersji x64 na ARM64) oraz domyślny Program Files\dotnet dla architektury natywnej.
Każda instalacja SDK przechowuje odrębne konfiguracje, a Visual Studio posiada własną kopię SDK, zarządzaną niezależnie od tych zainstalowanych globalnie. To zapewnia stabilność narzędzi IDE nawet przy częstych aktualizacjach SDK.
Strategia instalacji równoległej SDK 8, 9 i 10
Poprawna równoległa instalacja SDK wersji 8, 9 i 10 wymaga uwzględnienia funkcjonalności, kompatybilności oraz dedykowanego wsparcia dla każdej wersji.
Poniżej przedstawiono kluczowe cechy i wymagania dla poszczególnych wersji SDK:
| Wersja | Charakterystyka | Wsparcie Visual Studio |
|---|---|---|
| .NET 8 | LTS – pełna stabilność, wsparcie dla desktop/web/runtime | VS 2022 (min. 17.8) |
| .NET 9 | Ulepszenia wydajności, testowanie równoległe, Terminal Logger | VS 2022 (min. 17.12) |
| .NET 10 Preview | Innowacje: lokalne instalacje SDK przez global.json paths | VS 2022 Preview (min. 17.14 Preview) |
Instalacje SDK można realizować przez natywne instalatory (zalecane dla deweloperów), jak i z użyciem skryptów PowerShell – te drugie najlepiej sprawdzają się w automatyzacji CI/CD lub tam, gdzie brak uprawnień administratora.
.NET 9 wprowadza testowanie równoległe dla projektów multi-target oraz nowoczesny Terminal Logger zwiększający czytelność wyników testów.
.NET 10 Preview oferuje rewolucyjne zarządzanie lokalnymi instalacjami SDK – plik global.json może wskazać precyzyjne ścieżki, co pozwala testować określone wersje tylko lokalnie, bez wpływu na środowisko globalne.
Wymagania kompatybilności SDK z VS są kluczowe – użycie niezgodnej wersji uniemożliwi korzystanie z pełnych możliwości IDE, takich jak IntelliSense czy debugowanie.
Specyfika pracy z wersjami Preview
Wersje Preview .NET SDK służą testowaniu nowych rozwiązań, są mniej stabilne i bardziej narażone na zmiany niż wydania produkcyjne. Można je uruchamiać tylko w powiązaniu z odpowiednimi wersjami Visual Studio Preview, które mogą być zainstalowane równolegle z wersją stabilną IDE.
Przy pracy nad Preview należy szczególnie dbać o spójność konfiguracji i środowiska deweloperskiego. Stosuj w pliku global.json parametr allowPrerelease, by świadomie zezwalać bądź blokować użycie wersji przedprodukcyjnych:
- gdy allowPrerelease=false – SDK korzysta wyłącznie z wersji stabilnych,
- gdy allowPrerelease=true – projekt może wykorzystywać Preview,
- gdy parametr pominięty – domyślnie false.
Korzystanie z wersji Preview nie jest rekomendowane w produkcji, a równoległe środowiska (stabilne/Preview) należy organizować z jasno zdefiniowaną procedurą migracji i testowania.
.NET 10 Preview pozwala automatycznie publikować projekty kontenerowe bez dodatkowej konfiguracji, a polecenie dotnet tool install --allow-roll-forward ułatwia korzystanie z narzędzi .NET nawet, gdy nie są one przystosowane do najnowszych wersji platformy.
Wersje Preview mogą częściej wprowadzać breaking changes, dlatego utrzymanie środowiska produkcyjnego wyłącznie na wersjach stabilnych i testowanie zmian w kontrolowanych warunkach jest najlepszą praktyką.
Izolacja projektów przez plik global.json
Plik global.json umożliwia izolację projektów poprzez wymuszenie korzystania ze wskazanej wersji SDK, co gwarantuje powtarzalność buildów niezależnie od środowiska.
Najważniejsze opcje konfiguracyjne global.json obejmują:
- sdk.version – minimalna wymagana wersja SDK;
- sdk.rollForward – strategia podnoszenia wersji SDK w razie dostępności wyższych:
- latestPatch – wyższe tylko patch tej samej major/minor/feature,
- latestFeature – wyższe feature band lub patch tej samej major/minor,
- latestMinor – dowolna wyższa minor,
- latestMajor – dowolna wyższa major.
- allowPrerelease – kontrola dostępu do wersji Preview;
- errorMessage – niestandardowy komunikat w razie braku odpowiedniego SDK.
.NET 10 Preview 3 rozszerza global.json o element paths, dzięki któremu można określić listę lokalnych ścieżek wyszukiwania SDK:
- ścieżki względne i bezwzględne,
- specjalne tokeny (np. $host$ – odwołanie do globalnej instalacji).
Najlepiej stosować ograniczenie roll-forward do poziomu patch, by korzystać z najnowszych poprawek bez ryzyka niepożądanych zmian. Warto również blokować wersje Preview w produkcji poprzez allowPrerelease=false.
Integracja z Visual Studio i zarządzanie IDE
Visual Studio automatycznie zarządza własną kopią .NET SDK, co gwarantuje spójność IDE z narzędziami i eliminuje ryzyko konfliktów przy aktualizacjach środowiska.
Instalacja workload Visual Studio extension development zapewnia dostęp do pełnego SDK i wszystkich wymaganych narzędzi, zarówno przy pierwszej instalacji, jak i z poziomu instalatora narzędziowego.
Każda wersja Visual Studio zawiera jedną dedykowaną kopię SDK, automatycznie aktualizowaną wraz z IDE – to oznacza, że różne instancje Visual Studio mogą korzystać z różnych wersji SDK, co wymaga szczególnej uwagi.
Można również instalować dodatkowe wersje SDK niezależnie od Visual Studio bez obawy o nadpisanie ich przez mechanizm aktualizacji IDE – ich utrzymanie leży po stronie użytkownika.
Stosując nowe wersje SDK, pamiętaj o zgodności z minimalnymi wymaganiami Visual Studio i MSBuild, gdyż starsze wersje IDE nie obsłużą nowszych SDK.
Praca z wersjami Preview wymaga instalacji zgodnego Visual Studio Preview (np. SDK 10.0.100 Preview 3 z VS 17.14 Preview 3) – bez tego nie uzyskasz pełnej funkcjonalności narzędzi.
Otwieranie projektu extensibility bez zainstalowanego SDK wywoła okno Install Missing Feature, co upraszcza wdrożenie nowych deweloperów do projektów wymagających komplementarnych narzędzi.
Zaawansowane zarządzanie wersjami SDK i rozwiązywanie problemów
Stosowanie wielu wersji SDK prowadzi do specyficznych problemów, takich jak automatyczne aktualizacje Visual Studio usuwające wymagane przez projekt SDK. Kluczowe jest wdrożenie lokalnego zarządzania SDK na poziomie repozytorium poprzez nowe funkcje ścieżek w global.json (od .NET 10 Preview 3).
Migracja lub instalacja SDK w niestandardowych lokalizacjach nie jest wspierana od wersji .NET 6 – unikaj ręcznego przenoszenia katalogów. Stosuj wyłącznie skrypty dotnet-install.ps1 -InstallDir w celu poprawnej instalacji.
Dla środowisk Azure DevOps Server należy skonfigurować zmienną AZPAGENTDOWNGRADEDISABLED = true przez polecenie:
setx AZPAGENTDOWNGRADEDISABLED true /M(w cmd jako administrator, wymagany restart systemu),
W sytuacji braku zgodności wersji SDK z narzędziami lub bibliotekami innych vendorów, możliwa jest konfiguracja rollForward (np. przez --allow-roll-forward), by umożliwić uruchamianie narzędzi na nowszych wersjach platformy.
Diagnostyka selekcji SDK:
- dotnet –list-sdks – wyświetla wszystkie zainstalowane SDK,
- dotnet –version – pokazuje aktualnie wybraną wersję,
- analiza obecności plików global.json w strukturze katalogów projektu.
Regularnie sprawdzaj te ustawienia, by szybko identyfikować i rozwiązywać konflikty wersji SDK.
Najlepsze praktyki bezpieczeństwa i stabilności
Dbaj o spójne i bezpieczne środowisko pracy wdrażając poniższe praktyki:
- używaj określonej wersji SDK w global.json oraz ogranicz roll-forward do latestPatch,
- blokuj wersje Preview w projektach produkcyjnych przez allowPrerelease=false (lub bez tego parametru),
- wdrażaj custom error message w global.json z instrukcjami dla nowych deweloperów,
- regularnie aktualizuj SDK do najnowszego patcha w cyklu CI/CD;
- testuj aktualizacje major/minor w odseparowanych środowiskach staging z analizą breaking changes;
- izoluj środowiska Preview od produkcyjnych,
- stosuj monitoring i audyt wersji SDK na wszystkich środowiskach,
- twórz kopie zapasowe plików global.json i lokalnych instalacji SDK, dodając dokumentację procesów instalacyjnych i wersjonowania.
Te działania minimalizują ryzyko awarii procesów budowania, zwiększają bezpieczeństwo oraz ułatwiają onboard nowych członków zespołu.
Wnioski i perspektywy platformy .NET
Równoległa instalacja wersji 8, 9 i 10 SDK oraz świadome zarządzanie wersjami Preview tworzą elastyczne, niezawodne i nowoczesne środowisko deweloperskie.
SxS i global.json pozwalają na granularną kontrolę wykorzystywanych wersji SDK, co przekłada się na reprodukowalność buildów i bezpieczeństwo aplikacji.
Debiut funkcji ścieżek lokalnych (paths) w .NET 10 Preview 3 to znaczący krok umożliwiający niezależne testowanie nowych wersji SDK bez ryzyka utraty stabilności produkcyjnej.
Przyszłość zarządzania SDK w .NET to dalsza automatyzacja, wsparcie dla różnych architektur i ekosystemów, a także pełniejsza integracja z narzędziami CI/CD i konteneryzacją.
Rekomendowane jest regularne szkolenie zespołów, automatyzacja procesów zarządzania wersjami i aktywne monitorowanie nowych funkcjonalności Preview.