Wróć do dziennika
9 czerwca 2026

.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
runtime async .net 11

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
05-_-reszta-nowo_ci.png

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!

Union types .net11

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.