.NET 11 i C# 15 — Co nowego? Przegląd zmian względem .NET 10 i .NET 9
Microsoft oficjalnie zapowiedział .NET 11 i C# 15 — najnowszą generację platformy, która trafi do rąk deweloperów w listopadzie 2026 roku. Co nowego przynosi ta wersja względem .NET 10 i .NET 9? Sprawdzamy kluczowe zmiany w środowisku uruchomieniowym, bibliotekach, SDK, a także nowe funkcje języka C# 15.
Czym jest .NET 11 i kiedy pojawi się na rynku?
.NET 11 to następna wersja platformy Microsoft, planowana na listopad 2026 roku. Aktualnie dostępne są wersje preview (do Preview 4). W odróżnieniu od .NET 10 (LTS — Long Term Support z 3 latami wsparcia) i .NET 9 (STS — 18 miesięcy), .NET 11 będzie wersją STS, co oznacza 18 miesięcy oficjalnego wsparcia.
To ważna informacja przy planowaniu długoterminowych projektów — jeśli potrzebujesz stabilnej bazy na wiele lat, warto pozostać na .NET 10 LTS lub poczekać na .NET 12 (LTS, planowane na 2026).
Mapa zmian: .NET 9 → .NET 10 → .NET 11
Zanim przejdziemy do szczegółów .NET 11, warto spojrzeć na ewolucję platformy w ostatnich wersjach:
Wersja │ Typ wsparcia │ Kluczowe nowości │
.NET 9 │ STS (18 mies)│ Blazor SSR, AOT ulepszenia │
.NET 10 │ LTS (3 lata) │ Perf, C# 14, LINQ, Blazor │
.NET 11 │ STS (18 mies)│ Runtime Async, C# 15, Union
Środowisko uruchomieniowe .NET 11 — kluczowe zmiany
To jeden z najważniejszych obszarów zmian w .NET 11. Microsoft wprowadza szereg ulepszeń, które bezpośrednio przekładają się na wydajność i stabilność aplikacji.
Runtime-native Async (Runtime Async)
Największą nowością w środowisku uruchomieniowym jest Runtime Async — natywne wsparcie dla asynchroniczności bezpośrednio w JIT. To fundamentalna zmiana w sposobie działania kodu async/await:
- Czystsze stack traces podczas debugowania błędów
- Niższy narzut pamięciowy dla operacji asynchronicznych
- Lepsza integracja z debuggerem
- Dostępne jako feature preview (wymaga EnablePreviewFeatures=true i net11.0)
W porównaniu do .NET 10, gdzie async/await było w pełni zarządzane przez Roslyn, w .NET 11 część tej logiki przenosi się na poziom runtime, co eliminuje overhead warstwy pośredniej.
Ulepszone wymagania sprzętowe
.NET 11 podnosi minimalne wymagania sprzętowe dla architektur x86/x64 i Arm64, wymagając nowocześniejszych instrukcji procesora. Umożliwia to JIT-owi generowanie bardziej zoptymalizowanego kodu maszynowego, co przekłada się na wyższy throughput aplikacji produkcyjnych.
Ulepszenia JIT
Kompilator JIT w .NET 11 otrzymuje szereg optymalizacji:
- Lepsza eliminacja bounds check — mniej zbędnych sprawdzeń granic tablic
- Usuwanie redundantnych checked context — szybszy kod arytmetyczny
- Optymalizacja switch expressions
- Ulepszenia dla SequenceEqual — często używana w porównywaniu span-ów

Biblioteki .NET 11 — nowe API
Biblioteki standardowe .NET 11 wnoszą wiele praktycznych ulepszeń, które dewelopery odczują w codziennej pracy.
Klasa Process — nowe możliwości
Klasa System.Diagnostics.Process zyskuje nowe metody:
- Run-and-capture helpers — uruchamianie procesów i przechwytywanie wyników w jednej linii
- Fire-and-forget launches — asynchroniczne uruchamianie procesów bez blokowania
- Lifecycle methods — zdarzenia cyklu życia procesu
- Bezpieczniejsza obsługa poprzez tighter handling SafeProcessHandle
Kompresja i archiwizacja
Namespace System.IO.Compression wzbogaca się o:
- Ulepszone API Base64 — szybsze kodowanie/dekodowanie
- Nowe metody dla wpisów ZIP archive
- Wsparcie dla Zstandard (zstd) — nowoczesny algorytm kompresji od Meta/Facebook, który łączy wysoką szybkość z dobrym współczynnikiem kompresji
- GNU sparse format 1.0 support dla archiwów TAR
System.Text.Json — ważne ulepszenia
Jedne z najbardziej wyczekiwanych zmian dotyczą popularnego serializatora JSON:
- Generic type info retrieval — łatwiejsze pobieranie informacji o typach
- JsonNamingPolicy.PascalCase — nowa polityka nazewnictwa
- Per-member naming policy override — różne konwencje nazewnictwa dla poszczególnych właściwości
- Utf8JsonWriter.Reset — resetowanie writera bez alokacji nowych obiektów

Discriminated Unions w bibliotekach
W namespace System.Runtime.CompilerServices pojawia się infrastruktura dla discriminated unions: UnionAttribute i IUnion. To scaffolding, który umożliwia używanie nowej funkcji C# 15 — Union Types (omówionej poniżej).
Inne zmiany w bibliotekach
- MemoryCache z wbudowanymi metrykami OpenTelemetry — gotowe do monitorowania
- Console wspiera zmienną środowiskową FORCE_COLOR
- Hardening TLS handshake i certificate-validation alerts na Linux
- HTTP/2 automatic downgrade dla Windows Authentication
.NET 11 SDK — co nowego dla developera?
SDK to codzienny towarzysz pracy dewelopera. .NET 11 wnosi kilka bardzo praktycznych usprawnień.
Mniejsze instalatory
Na Linux i macOS instalatory SDK są teraz mniejsze dzięki deduplikacji assembly. Dodatkowe oszczędności uzyskano przez usprawnienia w zarządzaniu DotnetTools. Dla środowisk CI/CD to realna oszczędność czasu pobierania i miejsca na dysku.
Ulepszony analizator kodu
Analizator kodu CA1873 i inne reguły zostały usprawnione — mniej fałszywych alarmów, czytelniejsze komunikaty diagnostyczne. W praktyce oznacza to mniej szumu w oknie błędów i skupienie się na prawdziwych problemach.
Obsługa solution filters z CLI
Teraz możesz tworzyć i edytować pliki .slnf (solution filters) bezpośrednio przez CLI: dotnet sln. To ułatwia automatyzację w dużych monorepozytoriach, gdzie pracujesz tylko z częścią projektów.
Nowe opcje dotnet run i dotnet watch
- dotnet run -e — przekazywanie zmiennych środowiskowych z linii poleceń
- dotnet watch — integracja z Aspire app-host, automatyczne odtwarzanie po crashu, lepszy wybór urządzenia
- File-based app support z #:include — podział aplikacji na wiele plików
OpenTelemetry zamiast Application Insights
CLI telemetria przechodzi z Application Insights na OpenTelemetry. To krok w kierunku standaryzacji obserwowalności. Dodatkowo Microsoft pracuje nad NativeAOT entry point dla dotnet CLI, co w przyszłości może przyspieszyć uruchamianie narzędzi.
C# 15 — nowe funkcje języka
C# 15 to wersja dostępna z .NET 11 Preview. Na chwilę obecną (Preview 4) zawiera dwie kluczowe funkcje językowe.
1. Collection Expression Arguments
Ta funkcja rozszerza wyrażenia kolekcji (dostępne od C# 12) o możliwość przekazywania argumentów do konstruktora lub metody fabrycznej poprzez element with(...).
Praktyczny przykład:
// C# 14 i wcześniej — dwa oddzielne kroki:
var names = new List<string>(capacity: 100);
names.AddRange(new[] { "one", "two", "three" });
// C# 15 — zwięzła składnia z collection expression arguments:
List<string> names = [(capacity: 100), "one", "two", "three"];
// Przykład z HashSet i custom comparer:
HashSet<string> set = [(StringComparer.OrdinalIgnoreCase), "Hello", "HELLO", "hello"];
// set zawiera tylko 1 element — wszystkie stringi są równe przy OrdinalIgnoreCase
Korzyść: kod staje się bardziej deklaratywny i zwięzły. Jeden syntax dla tworzenia i inicjalizowania kolekcji, zamiast dwóch oddzielnych operacji.
2. Union Types
To największa nowość C# 15 — Union Types. Pozwalają na zdefiniowanie zmiennej, która może być jednym z kilku typów. Są odpowiedzią na jeden z najczęstszych pain pointów w C#: potrzebę reprezentacji "albo tego albo tamtego".
Deklaracja union:
public record class Cat { string Name; }
public record class Dog { string Name; }
public record class Bird { string Name; }
// Deklaracja union — Pet może być Cat, Dog lub Bird
public union Pet(Cat, Dog, Bird);
Użycie z pattern matching:
Pet pet = new Dog { Name = "Rex" };
// Kompilator wymusza exhaustive switch
string name = pet switch
{
Dog d => d.Name,
Cat c => c.Name,
Bird b => b.Name,
};
Union Types dostarczają niejawne konwersje z każdego case type i wymuszają na kompilatorze sprawdzenie wszystkich przypadków w switch — koniec z błędami runtime z powodu nieobsłużonego przypadku!

ASP.NET Core w .NET 11
Szczegóły nowości w ASP.NET Core dla .NET 11 są dostępne w oficjalnej dokumentacji. Warto jednak wiedzieć, że framework webowy Microsoftu kontynuuje linię ulepszeń z .NET 10, z dalszym skupieniem na wydajności Minimal API, ulepszeniach Blazor i toolingu dla aplikacji chmurowych.
Entity Framework Core 11
EF Core 11 towarzyszy .NET 11 i przynosi własny zestaw zmian. Szczegółowa dokumentacja jest dostępna na oficjalnych stronach Microsoft. W poprzednich wersjach EF Core skupiał się na ulepszeniach tłumaczenia LINQ, complex types i bulk operations — warto śledzić release notes.
Jak migrować z .NET 9 lub .NET 10?
Migracja do .NET 11 jest typowo prosta dla projektów korzystających z poprzednich wersji:
- Zaktualizuj TargetFramework w .csproj z net9.0/net10.0 na net11.0
- Zaktualizuj wszystkie pakiety NuGet do wersji zgodnych z .NET 11
- Przejrzyj breaking changes (dostępne na stronie dokumentacji)
- Opcjonalnie: włącz Runtime Async dodając runtime-async=on do runtimeconfig
- Przetestuj aplikację z naciskiem na obszary, gdzie używasz async/await, JSON i Process
Z .NET 9 na .NET 11: większy skok, ale większość projektów nie wymaga zmian kodu. Główne ryzyko to breaking changes w bibliotekach zewnętrznych.
Z .NET 10 na .NET 11: minimalne zmiany. Jeśli Twój projekt jest na .NET 10 LTS i działa dobrze, rozważ poczekanie na .NET 12 LTS zamiast migracji do STS.
Podsumowanie: czy warto przejść na .NET 11?
NET 11 i C# 15 to krok naprzód, ale niekoniecznie dla każdego projektu. Oto szybka heurystyka decyzyjna:
- Migruj do .NET 11, jeśli: budujesz nowy projekt, jesteś na .NET 9 i szukasz przeskoku, chcesz najnowszych funkcji C# 15 (Union Types, Collection Expression Arguments)
- Poczekaj na .NET 12 LTS, jeśli: prowadzisz duży projekt produkcyjny na .NET 10 LTS, potrzebujesz wieloletniego wsparcia, priorytetem jest stabilność
- Unikaj .NET 11 w produkcji, jeśli: zaczynasz nowy długoterminowy projekt — lepiej użyj .NET 10 LTS lub poczekaj na .NET 12 LTS
Najciekawsze nowości to bez wątpienia Runtime Async (przyszłość obsługi asynchroniczności), Union Types w C# 15 (długo wyczekiwana przez community) oraz Zstandard compression. Te zmiany wskazują kierunek, w którym platforma .NET zmierza — coraz bliżej wydajności natywnej i coraz bardziej ekspresywnemu językowi.
Śledź kolejne preview .NET 11 i C# 15 — Microsoft regularnie aktualizuje dokumentację w miarę dodawania nowych funkcji do kolejnych preview build.