.NET Core vs .NET Framework: Kluczowe różnice

Szybki werdykt: co wybrać?
Jeśli budujesz nową aplikację — wybierz nowoczesny .NET (obecnie .NET 10 LTS). To następcza, unifikowana platforma, która łączy w sobie to, co najlepsze z .NET Core, i jest aktywnie rozwijana przez Microsoft. .NET Framework 4.8 to ostatnia wersja tej platformy — otrzymuje wyłącznie poprawki bezpieczeństwa, działa tylko na Windows i nigdy nie doczeka się wsparcia dla kontenerów Linuksa.
Jeśli utrzymujesz istniejący system oparty na .NET Framework, który działa stabilnie, korzysta z WCF (pełny stos serwerowy), Web Forms, Windows Workflow Foundation lub głębokiej integracji z COM, pozostanie na .NET Framework jest uzasadnioną decyzją architektoniczną. W każdym innym przypadku warto rozważyć migrację.
Ten artykuł wyjaśnia różnice między .NET Core a .NET Framework, pokazuje, kiedy każda z platform ma sens, i dostarcza konkretnych wskazówek dotyczących migracji.
Czym jest .NET Core?
.NET Core został wydany przez Microsoft w 2016 roku jako nowa, otwartoźródłowa i wieloplatformowa implementacja platformy .NET — zaprojektowana od podstaw z myślą o nowoczesnych aplikacjach: mikroserwisach, rozwiązaniach cloud-native, API wysokiej wydajności i aplikacjach kontenerowych.
Od wersji .NET 5 (listopad 2020) Microsoft porzucił nazwę „Core” i zunifikował platformę pod prostą nazwą .NET. Kolejne wersje — .NET 6, 7, 8, 9 i 10 — są bezpośrednimi następcami .NET Core. Jeśli w dokumentacji sprzed 2021 roku czytasz „.NET Core”, w myślach zastąp to określeniem „nowoczesny .NET”.
Kluczowe cechy .NET Core / nowoczesnego .NET
- Wieloplatformowość — działa na Windows, Linux i macOS. Kod napisany raz można uruchomić w różnych środowiskach.
- Otwarte źródła — cały kod jest dostępny na GitHubie na licencji MIT, a Microsoft aktywnie przyjmuje wkład społeczności.
- Modułowość — aplikacja pobiera tylko te pakiety NuGet, których faktycznie potrzebuje. Dzięki temu jest lżejsza i szybciej się uruchamia.
- Wysoka wydajność — dzięki serwerowi Kestrel, kompilatorowi RyuJIT z kompilacją warstwową i zoptymalizowanemu GC nowoczesny .NET regularnie plasuje się w czołówce benchmarków TechEmpower.
- Gotowość chmurowa — natywne wsparcie dla Dockera, Kubernetesa, Azure, AWS i GCP.
- Wbudowane wstrzykiwanie zależności (DI) — kontener DI jest częścią frameworka, co upraszcza zarządzanie cyklem życia usług.
- Wdrażanie obok siebie (side-by-side) — różne aplikacje mogą działać na różnych wersjach .NET na tym samym serwerze bez konfliktów.
- Samodzielne wdrażanie (self-contained) — aplikacja może zawierać własne środowisko uruchomieniowe, eliminując zależność od wersji zainstalowanej systemowo.

Czym jest .NET Framework?
.NET Framework to pierwsza implementacja platformy .NET, wydana przez Microsoft w 2002 roku. Przez ponad dwie dekady była podstawą ogromnej liczby aplikacji korporacyjnych, desktopowych i webowych działających wyłącznie w środowisku Windows.
Ostatnia wersja — .NET Framework 4.8.1 — została wydana w sierpniu 2022 roku. Microsoft ogłosił, że nie powstaną kolejne duże wersje. Platforma pozostaje w trybie utrzymania: otrzymuje poprawki bezpieczeństwa i niezawodności, ale nie nowe funkcje. Jest nadal dostarczana z systemem Windows i będzie wspierana tak długo, jak długo wspierany jest system operacyjny, na którym jest zainstalowana.
Kluczowe cechy .NET Framework
- Tylko Windows — platforma jest ściśle zintegrowana z systemem Windows i nie działa na Linuksie ani macOS.
- Dojrzały ekosystem — ogromna biblioteka klas (FCL), tysiące bibliotek firm trzecich i dziesięciolecia sprawdzonych wzorców.
- Wsparcie dla technologii Windows — Windows Forms, WPF, ASP.NET Web Forms, WCF (pełny stos serwerowy), Windows Workflow Foundation, COM+.
- Code Access Security (CAS) — mechanizm piaskownicy oparty na dowodach, niedostępny w nowoczesnym .NET.
- Wdrażanie systemowe — jedna wersja .NET Framework na maszynie; aktualizacje wpływają na wszystkie aplikacje.
- Brak wdrażania obok siebie — nie można uruchomić dwóch wersji .NET Framework 4.x równolegle na jednej maszynie.

Porównanie w skrócie — tabela
| Cecha | .NET Core / nowoczesny .NET (5–10) | .NET Framework (4.8.1) |
|---|---|---|
| Platforma | Windows, Linux, macOS | Tylko Windows |
| Open source | W pełni (MIT) | Częściowo (kod referencyjny) |
| Wydajność | Wysoka (Kestrel, RyuJIT, zoptymalizowany GC) | Dobra, ale ograniczona przez starszą architekturę CLR |
| Wdrażanie | Samodzielne lub zależne od frameworka; kontenery | Instalacja systemowa; jedna wersja na maszynie |
| Wersje obok siebie | Tak | Nie (tylko 3.5 i 4.x osobno) |
| Typy aplikacji | Web, API, mikroserwisy, konsola, IoT, chmura, desktop (Windows) | Desktop Windows (WinForms, WPF), Web Forms, WCF, usługi Windows |
| Kontenery Docker | Natywne wsparcie, małe obrazy | Możliwe tylko w kontenerach Windows, duże obrazy |
| Mikroserwisy | Zoptymalizowane | Ograniczone |
| Wsparcie | Aktywne, cykl LTS/STS | Tryb utrzymania — tylko poprawki bezpieczeństwa |
| Przyszłość | Główny kierunek rozwoju Microsoft | Brak nowych funkcji |

Platforma, wydajność i wdrażanie
Wsparcie wieloplatformowe
.NET Framework działa wyłącznie na Windows. Nowoczesny .NET uruchamia się na Windows, Linuksie i macOS — zarówno w środowisku deweloperskim, jak i produkcyjnym. To kluczowa różnica dla zespołów, które chcą korzystać z Linuksa w CI/CD, wdrażać aplikacje w chmurze lub używać kontenerów Docker.
Wydajność i skalowalność
Nowoczesny .NET został zaprojektowany z myślą o wydajności. Serwer Kestrel, kompilator RyuJIT z kompilacją warstwową (tiered compilation) oraz przeprojektowany garbage collector (GC serwerowy z stertami na rdzeń) zapewniają znacznie wyższą przepustowość i niższe zużycie pamięci niż .NET Framework w scenariuszach webowych i API.
W benchmarkach TechEmpower ASP.NET Core regularnie plasuje się w czołówce pod względem liczby żądań na sekundę w scenariuszach plaintext, JSON i zapytań do bazy danych. W praktyce zespoły migrujące z .NET Framework do .NET 8 często obserwują 30–50% wzrost przepustowości i niższe zużycie pamięci na tym samym sprzęcie.
Wdrażanie i kontenery
.NET Framework instaluje się systemowo — jedna wersja na maszynie, aktualizowana przez Windows Update. To wygodne w środowiskach korporacyjnych, ale utrudnia izolację wersji między aplikacjami.
Nowoczesny .NET oferuje elastyczne modele wdrażania:
- Framework-dependent — aplikacja korzysta z zainstalowanego systemowo środowiska uruchomieniowego.
- Self-contained — aplikacja zawiera własne środowisko uruchomieniowe, więc nie wymaga instalacji .NET na serwerze.
- Kontenery — oficjalne obrazy
mcr.microsoft.com/dotnet/aspnetdla Linuksa i Windows Server Core. Dzięki wdrażaniu obok siebie każdy kontener może zawierać dokładnie tę wersję .NET, której potrzebuje.

Kiedy wybrać .NET Core / nowoczesny .NET?
Nowoczesny .NET (obecnie .NET 8 LTS lub .NET 10 LTS) jest właściwym wyborem w następujących sytuacjach:
- Nowe projekty — każda nowa aplikacja, API, mikroserwis lub narzędzie konsolowe powinno być budowane na nowoczesnym .NET.
- Aplikacje wieloplatformowe — gdy potrzebujesz uruchomić aplikację na Linuksie, macOS lub w kontenerach.
- Aplikacje cloud-native — wdrożenia w Azure, AWS, GCP, orkiestracja Kubernetes, funkcje serverless.
- Mikroserwisy — modułowa architektura, lekkość i wsparcie dla Dockera.
- Wysoka wydajność i skalowalność — API obsługujące duży ruch, systemy wymagające niskich opóźnień.
- Wiele wersji .NET na jednym serwerze — wdrażanie obok siebie.
- Zespoły pracujące na różnych systemach — Visual Studio Code na Linuksie, macOS i Windows; CLI
dotnetdostępne wszędzie.

Kiedy pozostać przy .NET Framework?
Istnieją konkretne, uzasadnione przypadki, w których migracja może być nieopłacalna lub niemożliwa w krótkim terminie:
- Istniejący, stabilny system — aplikacja działa, nie wymaga nowych funkcji, a migracja wiązałaby się z wysokim ryzykiem i kosztem.
- Zależność od WCF (pełny stos serwerowy) — WCF z powiązaniami net.tcp, zabezpieczeniami na poziomie wiadomości i transportem MSMQ nie ma bezpośredniego odpowiednika w nowoczesnym .NET. Projekt CoreWCF pokrywa tylko podzbiór scenariuszy (BasicHttpBinding, WSHttpBinding).
- ASP.NET Web Forms — brak ścieżki migracji do ASP.NET Core. Model postback, ViewState i pipeline HttpModule/HttpHandler są ściśle związane z Windows i IIS. Możliwe jest tylko przepisanie, nie przeniesienie.
- Windows Workflow Foundation (WF) — środowisko uruchomieniowe i narzędzia projektowe WF nie istnieją w nowoczesnym .NET.
- Głęboka integracja z COM — komponenty wymagające rejestracji systemowej COM, serwery out-of-process lub 32-bitowe serwery in-process mogą powodować problemy z wdrażaniem w kontenerach.
- Aplikacje wyłącznie desktopowe dla Windows — WinForms i WPF są dostępne w nowoczesnym .NET, ale jeśli aplikacja jest stabilna i nie wymaga nowych funkcji, migracja może nie być priorytetem.

Ścieżka migracji i narzędzia
Migracja z .NET Framework do nowoczesnego .NET to decyzja strategiczna, a nie tylko techniczna. Wpływa na skalowalność, utrzymanie i koszty. Większość udanych migracji przebiega w trzech fazach:
Faza 1: Wydzielenie wspólnej logiki do bibliotek .NET Standard 2.0
.NET Standard 2.0 to specyfikacja API, którą implementują zarówno .NET Framework 4.6.1+, jak i nowoczesny .NET (5–10). Przenieś logikę biznesową, modele domenowe i warstwę dostępu do danych do bibliotek klas targetujących netstandard2.0. Dzięki temu kod kompiluje się i działa na obu platformach, a aplikacja może być wdrażana w trakcie migracji.
To etap, w którym najczęściej ujawniają się rzeczywiste przeszkody: nieudokumentowane wywołania P/Invoke, pakiety NuGet bez wersji cross-platform, zależności od rejestru Windows.
Faza 2: Ocena i konwersja projektów
- .NET Upgrade Assistant — narzędzie CLI, które analizuje projekt, konwertuje pliki
.csprojdo formatu SDK-style, aktualizuje referencje NuGet i flaguje API bez odpowiednika w nowoczesnym .NET. - try-convert — globalne narzędzie .NET konwertujące projekty i całe rozwiązania do formatu SDK. Nie jest zalecane dla projektów o skomplikowanym procesie budowania (własne zadania MSBuild, importy).
- Platform compatibility analyzer — analizator wykrywający użycie API, które w nowoczesnym .NET rzucają
PlatformNotSupportedException. - .NET Portability Analyzer — raport zgodności zestawów z nowoczesnym .NET.
Faza 3: Zmiana środowiska uruchomieniowego i walidacja
Nowoczesny .NET pozwala uruchomić zmigrowaną aplikację na własnym, przypiętym środowisku uruchomieniowym obok pozostałych usług .NET Framework na tym samym serwerze. Przed wyłączeniem starej ścieżki przeprowadź testy obciążeniowe i walidację funkcjonalną.
Kluczowe zmiany w kodzie podczas migracji
- Konfiguracja — zamiast
web.configiConfigurationManagerużyjappsettings.jsoniIConfigurationwstrzykiwanego przez DI. - Start aplikacji — zamiast
Global.asaxużyjProgram.cszWebApplication.CreateBuilder. - Uwierzytelnianie —
HttpContext.CurrentzastąpIHttpContextAccessorwstrzykiwanym przez konstruktor. - Hosting — IIS zastąp Kestrelem (ewentualnie za reverse proxy: Nginx, Apache, IIS).
- Biblioteki — zamień pakiety niezgodne z .NET Standard 2.0 na ich odpowiedniki cross-platform.

Cykl wsparcia i przyszłościowe planowanie
Zrozumienie polityki wsparcia jest kluczowe dla planowania wieloletnich projektów.
Nowoczesny .NET wydawany jest co roku w listopadzie. Wersje parzyste (.NET 6, 8, 10) to wydania LTS (Long Term Support) z trzyletnim wsparciem. Wersje nieparzyste (.NET 7, 9) to wydania STS (Standard Term Support) z dwuletnim wsparciem. Poprawki bezpieczeństwa i niezawodności wydawane są co miesiąc, w „Patch Tuesday” — drugi wtorek miesiąca.
Aktualne wersje i daty końca wsparcia:
| Wersja | Typ | Data wydania | Koniec wsparcia |
|---|---|---|---|
| .NET 10 | LTS | listopad 2025 | listopad 2028 |
| .NET 9 | STS | listopad 2024 | listopad 2026 |
| .NET 8 | LTS | listopad 2023 | listopad 2026 |
.NET Framework 4.8.1 nie ma daty końca wsparcia w tradycyjnym rozumieniu — jest wspierany tak długo, jak długo wspierany jest system Windows, na którym jest zainstalowany. Nie otrzymuje jednak nowych funkcji ani ulepszeń wydajności.
Dla nowych projektów produkcyjnych wybieraj wersje LTS. .NET 8 LTS to stabilna podstawa do 2026 roku; .NET 10 LTS przejmuje tę rolę od listopada 2025.
Najczęściej zadawane pytania
Czym różni się .NET Core od .NET Framework w największym skrócie?
.NET Framework to oryginalna, windowsowa implementacja platformy .NET, której ostatnia wersja (4.8.1) jest w trybie utrzymania. .NET Core to jej wieloplatformowy, otwartoźródłowy następca, od wersji 5 nazywany po prostu .NET. Nowoczesny .NET działa na Windows, Linuksie i macOS, jest aktywnie rozwijany i obsługuje kontenery oraz chmurę.
Czy .NET Core zastąpił .NET Framework?
Tak, w sensie kierunku rozwoju. Microsoft nie planuje nowych wersji .NET Framework. Cały rozwój platformy odbywa się w nowoczesnym .NET. .NET Framework pozostaje wspierany w trybie utrzymania, ale nie otrzymuje nowych funkcji.
Czy mogę uruchomić aplikację .NET Framework w kontenerze Docker na Linuksie?
Nie. .NET Framework wymaga Windows, więc kontener musi być oparty na obrazie Windows Server Core lub Nano Server. Obrazy Windows są znacznie większe niż linuksowe i nie są obsługiwane na większości linuksowych pul węzłów Kubernetesa. Nowoczesny .NET działa na oficjalnych obrazach Alpine i Debian bez ograniczeń.
Którą wersję .NET wybrać dla nowego projektu w 2026 roku?
.NET 8 LTS lub .NET 10 LTS. .NET 10 LTS jest wspierany do listopada 2028 roku i to on powinien być głównym wyborem dla nowych projektów. .NET 8 LTS pozostaje dobrą opcją, jeśli zespół potrzebuje więcej czasu na adaptację.
Czy migracja z .NET Framework do nowoczesnego .NET jest trudna?
To zależy od złożoności projektu. Biblioteki, aplikacje konsolowe i proste API zwykle wymagają niewielu zmian. Projekty korzystające z WCF (pełny stos), Web Forms, WF lub głębokiej integracji z COM wymagają więcej pracy — czasem przepisania całych warstw. Narzędzia takie jak .NET Upgrade Assistant i .NET Standard 2.0 znacznie ułatwiają proces.
Co to jest .NET Standard i czy nadal jest potrzebny?
.NET Standard to formalna specyfikacja API, którą implementują różne platformy .NET. Biblioteka targetująca .NET Standard 2.0 działa na .NET Framework 4.6.1+ i na nowoczesnym .NET. Jest przydatny podczas migracji, gdy trzeba współdzielić kod między starą i nową platformą. Dla nowych bibliotek zaleca się targetowanie bezpośrednio nowoczesnego .NET.
Czy .NET Framework otrzymuje aktualizacje bezpieczeństwa?
Tak. .NET Framework 4.8.1 otrzymuje poprawki bezpieczeństwa i niezawodności, dystrybuowane przez Windows Update. Nie otrzymuje jednak nowych funkcji ani ulepszeń wydajności.
Podsumowanie
Wybór między .NET Core (nowoczesnym .NET) a .NET Framework to dziś przede wszystkim decyzja o kierunku rozwoju, a nie o technologii na chwilę. Nowoczesny .NET jest wieloplatformowy, otwartoźródłowy, wydajny i aktywnie rozwijany — to właściwy wybór dla nowych projektów, aplikacji chmurowych, mikroserwisów i systemów wymagających skalowalności.
.NET Framework pozostaje uzasadnionym wyborem dla istniejących systemów opartych na technologiach Windows, których migracja byłaby nieopłacalna lub niemożliwa w krótkim terminie — zwłaszcza WCF (pełny stos), Web Forms, WF i głębokiej integracji z COM.
Jeśli planujesz nowy projekt — wybierz .NET 10 LTS lub .NET 8 LTS. Jeśli utrzymujesz starszy system — zaplanuj fazową migrację z wykorzystaniem .NET Standard 2.0, .NET Upgrade Assistant i testów walidacyjnych. Kluczowe jest, aby decyzja była świadoma, oparta na rzeczywistych potrzebach biznesowych, a nie tylko na przyzwyczajeniu do technologii.
Autor: Zespół ds. rozwoju oprogramowania .NET. Artykuł oparty na oficjalnej dokumentacji Microsoft, polityce wsparcia .NET oraz benchmarkach TechEmpower.
Umowa SLA – co to jest, elementy, rodzaje i wzór
TikTok Framework Lynx: Framework ByteDance do tworzenia aplikacji cross-platform
React vs Next.js: Który framework wybrać w 2026 roku?
Software house czy freelancer – wybór wykonawcy do projektu IT