Wróć do bloga
Uncategorized11 min czytania

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

.NET Core vs .NET Framework

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.

.NET Core vs .NET Framework

Porównanie w skrócie — tabela

Cecha.NET Core / nowoczesny .NET (5–10).NET Framework (4.8.1)
PlatformaWindows, Linux, macOSTylko Windows
Open sourceW pełni (MIT)Częściowo (kod referencyjny)
WydajnośćWysoka (Kestrel, RyuJIT, zoptymalizowany GC)Dobra, ale ograniczona przez starszą architekturę CLR
WdrażanieSamodzielne lub zależne od frameworka; konteneryInstalacja systemowa; jedna wersja na maszynie
Wersje obok siebieTakNie (tylko 3.5 i 4.x osobno)
Typy aplikacjiWeb, API, mikroserwisy, konsola, IoT, chmura, desktop (Windows)Desktop Windows (WinForms, WPF), Web Forms, WCF, usługi Windows
Kontenery DockerNatywne wsparcie, małe obrazyMożliwe tylko w kontenerach Windows, duże obrazy
MikroserwisyZoptymalizowaneOgraniczone
WsparcieAktywne, cykl LTS/STSTryb utrzymania — tylko poprawki bezpieczeństwa
PrzyszłośćGłówny kierunek rozwoju MicrosoftBrak nowych funkcji

.NET Core vs .NET Framework

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/aspnet dla 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.

.NET Core vs .NET Framework

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 dotnet dostępne wszędzie.

.NET Core vs .NET Framework

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.

.NET Core vs .NET Framework

Ś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 .csproj do 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.config i ConfigurationManager użyj appsettings.json i IConfiguration wstrzykiwanego przez DI.
  • Start aplikacji — zamiast Global.asax użyj Program.cs z WebApplication.CreateBuilder.
  • Uwierzytelnianie — HttpContext.Current zastąp IHttpContextAccessor wstrzykiwanym 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.

.NET Core vs .NET Framework

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:

WersjaTypData wydaniaKoniec wsparcia
.NET 10LTSlistopad 2025listopad 2028
.NET 9STSlistopad 2024listopad 2026
.NET 8LTSlistopad 2023listopad 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