.NET Framework vs .NET Core
"What is the difference between .NET Framework and .NET Core?" is one of the most common questions in any .NET interview, for freshers and experienced developers alike. Interviewers want to know whether you understand why Microsoft created a new platform, what changed, and which one you would choose for a project. This article explains both platforms in simple words, compares them point by point, and lists the advantages and disadvantages of each.
- .NET Framework: the original, Windows-only platform, released in 2002. Its last version is 4.8.1. It gets security and bug fixes, but no new features.
- .NET Core: the modern, cross-platform and open-source rewrite, released in 2016. From version 5 it is simply called .NET (.NET 5, 6, 7, 8 ...). This is where all new development happens.
What is .NET Framework?
.NET Framework is the platform Microsoft released in 2002 to build applications for Windows. It includes the Common Language Runtime (CLR) that runs your code, a large class library, and application models such as:
- ASP.NET Web Forms and ASP.NET MVC / Web API for web applications (built on
System.Weband IIS) - Windows Forms and WPF for desktop applications
- WCF for SOAP services, and Windows Workflow Foundation
It is installed once per machine and is part of Windows. All .NET Framework 4.x versions replace each other "in place": installing 4.8 upgrades 4.6 for every application on that machine.
Thousands of enterprise applications still run on it, and Microsoft continues to support .NET Framework 4.8.1 as part of Windows. But it is finished: no new C# features, APIs or performance improvements are added.
What is .NET Core?
By around 2014, .NET Framework had become a problem. It only ran on Windows while the cloud was moving to Linux and containers, it was large and tied to the operating system, and it could not be improved quickly without risking millions of existing applications.
So Microsoft built a new platform from scratch: .NET Core, released in 2016. Its goals were:
- run on Windows, Linux and macOS,
- be open source (developed publicly on GitHub),
- be fast and lightweight, suitable for cloud, microservices and containers,
- allow several versions side by side on the same machine.
The naming confusion: .NET Core vs .NET 5+
.NET Core had versions 1.0, 2.0, 2.1, 2.2, 3.0 and 3.1. The next version skipped "4" (to avoid confusion with .NET Framework 4.x) and dropped the word "Core": it was released in 2020 as .NET 5. Since then there is one modern .NET, with a new major version every November:
| Version | Released | Note |
|---|---|---|
| .NET Core 1.0 | 2016 | First cross-platform version |
| .NET Core 2.0 / 2.1 | 2017 / 2018 | Many more APIs, .NET Standard 2.0 |
| .NET Core 3.0 / 3.1 | 2019 | WinForms and WPF support (Windows only), endpoint routing |
| .NET 5 | 2020 | "Core" dropped from the name |
| .NET 6 | 2021 | LTS, minimal hosting model, minimal APIs |
| .NET 7 | 2022 | STS |
| .NET 8 | 2023 | LTS |
| .NET 9 | 2024 | STS |
| .NET 10 | 2025 | LTS |
LTS (Long Term Support, even version numbers) releases are supported for three years. STS (Standard Term Support, odd numbers) releases have a shorter support period. Most companies choose LTS versions for production.
In interviews, ".NET Core" usually means "the modern .NET": .NET Core 1.0 to 3.1 and .NET 5 and later. In this article we use ".NET Core" in that sense.
Key differences at a glance
| Point | .NET Framework | .NET Core (.NET 5+) |
|---|---|---|
| First release | 2002 | 2016 |
| Latest version | 4.8.1 (final) | A new version every year |
| Operating systems | Windows only | Windows, Linux, macOS |
| Open source | Reference source only; not developed in the open | Fully open source (MIT licence), developed on GitHub |
| New features | None (maintenance only) | Yes, every release |
| Installation | One machine-wide version, part of Windows | Many versions side by side, or bundled with the app (self-contained) |
| Performance | Good | Much faster; performance is improved in every release |
| Web framework | ASP.NET (Web Forms, MVC 5, Web API 2) on System.Web | ASP.NET Core: MVC, Web API, Razor Pages, Blazor, minimal APIs |
| Web hosting | IIS on Windows | Kestrel, behind IIS, Nginx or Apache; Docker; any cloud |
| Dependency injection | Not built in (needs Unity, Autofac, Ninject...) | Built in |
| Configuration | web.config / app.config (XML) | appsettings.json, environment variables, secrets, Key Vault... |
| MVC and Web API | Separate frameworks with separate base classes | One unified framework (Controller / ControllerBase) |
| Desktop apps | WinForms, WPF | WinForms, WPF (still Windows only), .NET MAUI |
| Containers / microservices | Only large Windows containers | Small Linux containers, ideal for microservices |
| Command-line tools | Mostly Visual Studio | dotnet CLI (new, build, run, test, publish) on any OS |
| Project file | Long, old-style .csproj | Short SDK-style .csproj |
The differences explained
1. Cross-platform
A .NET Framework application runs only on Windows. A .NET Core application can be built on Windows and deployed to a Linux server or a Linux Docker container. This matters a lot in the cloud, where Linux servers and containers are cheaper and more common.
2. Installation and deployment
With .NET Framework there is one version per machine, shared by every application. Upgrading the framework for one application upgrades it for all of them, which is risky on a shared server.
With .NET Core, each application chooses its own version:
- Framework-dependent: the app uses a .NET runtime installed on the machine, and several runtime versions can be installed side by side.
- Self-contained: the runtime is copied with the application, so nothing needs to be installed on the server.
- Single-file and Native AOT publishing (.NET 7+): the app becomes one executable that starts very quickly.
dotnet publish -c Release -r linux-x64 --self-contained true
3. Performance
.NET Core was designed for performance, and every release brings more improvements: a faster JIT compiler with tiered compilation, Span<T> and Memory<T> for working with data without extra memory allocations, a faster JSON serializer (System.Text.Json), and the high-performance Kestrel web server. In independent web benchmarks, ASP.NET Core is among the fastest mainstream web frameworks. The same hardware can handle far more requests than an ASP.NET application on .NET Framework.
4. A modern, unified web framework
In .NET Framework, ASP.NET MVC and ASP.NET Web API were separate frameworks with different base classes, filters and routing. ASP.NET Core merged them into one framework, removed the dependency on System.Web and IIS, and added built-in dependency injection, a middleware pipeline, a new configuration system and built-in logging.
// ASP.NET Core: startup in a few lines (Program.cs)
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddControllersWithViews(); // MVC + Web API together
builder.Services.AddScoped<IOrderService, OrderService>(); // built-in dependency injection
var app = builder.Build();
app.UseStaticFiles();
app.MapDefaultControllerRoute();
app.Run();
5. Open source and community
.NET Core, ASP.NET Core, Entity Framework Core and the C# compiler are developed in public on GitHub under the MIT licence. Anyone can read the code, report issues and contribute fixes, and the community can follow (and influence) what is planned for the next version.
6. Release cycle
.NET Framework changed slowly and is now frozen. .NET Core ships a new version every year, with predictable support dates. That means continuous improvements, but also that teams must upgrade regularly to stay on a supported version.
What is NOT available in .NET Core
Some older technologies were not brought to .NET Core. This is the main reason many old applications still run on .NET Framework:
| .NET Framework technology | Status in .NET Core | Alternative |
|---|---|---|
| ASP.NET Web Forms | Not available | ASP.NET Core MVC, Razor Pages or Blazor (requires a rewrite of the UI) |
| WCF server (hosting SOAP services) | Not available from Microsoft | gRPC, ASP.NET Core Web API, or the community project CoreWCF |
| Windows Workflow Foundation (WF) | Not available | Community port (CoreWF) or other workflow engines |
| .NET Remoting | Not available | gRPC, REST APIs, named pipes |
| AppDomains (creating more than one) | Not supported | Separate processes, or AssemblyLoadContext for loading assemblies |
| Code Access Security (CAS) | Not supported | Operating-system security, containers |
| WinForms and WPF | Available from .NET Core 3.0 | Still Windows only |
Advantages and disadvantages of .NET Framework
Advantages
- Very stable and mature: more than 20 years of real-world use and bug fixing.
- Supported as part of Windows: security fixes continue, and 4.8.1 is already installed on modern Windows versions.
- Supports older technologies that .NET Core does not: Web Forms, WCF server, Workflow Foundation, .NET Remoting.
- Huge amount of existing code, documentation and Q&A for older application types.
- No forced upgrades: because the framework doesn't change, an application can run for years without upgrade work.
Disadvantages
- Windows only: no Linux servers, no small Linux containers.
- No new features: no new runtime APIs, performance improvements or modern ASP.NET features. Newer C# language versions are not officially supported.
- Slower and uses more memory than .NET Core for the same work.
- One machine-wide version: upgrading affects every application on the server.
- Tied to IIS for web applications, with a heavier
System.Webpipeline. - No built-in dependency injection or modern configuration system.
- Shrinking ecosystem: many new NuGet packages and libraries target only modern .NET, and developers prefer to work on modern .NET.
Advantages and disadvantages of .NET Core
Advantages
- Cross-platform: develop and run on Windows, Linux and macOS.
- High performance: faster request handling and lower memory use, which means lower hosting costs.
- Cloud and container friendly: small Docker images, fast start-up, ideal for microservices and Kubernetes.
- Side-by-side and self-contained deployment: each app chooses its own runtime version, with no conflicts.
- Modern architecture: built-in dependency injection, middleware, configuration, logging and health checks.
- Unified framework: MVC, Web API, Razor Pages, Blazor, gRPC, SignalR and minimal APIs on one platform.
- Open source with an active community and a transparent roadmap.
- Continuous improvement: new C# features, APIs and performance gains every year.
- Modern tooling: the
dotnetCLI, VS Code, short SDK-style project files and easy CI/CD.
Disadvantages
- Regular upgrades required: each version is supported for a limited time, so teams must upgrade every one to three years.
- Some old technologies are missing: Web Forms, WCF server and Workflow Foundation applications need rewriting, not just recompiling.
- Migration effort: moving a large .NET Framework application can take months, especially if it uses
System.Web, Web Forms or old third-party components. - Desktop is still Windows-only: WinForms and WPF run on modern .NET, but only on Windows.
- Learning curve: developers used to
web.config,Global.asaxand Web Forms must learn middleware, dependency injection and the new hosting model. - Some old libraries are not available: a few legacy or Windows-specific NuGet packages were never updated for modern .NET.
Which one should you choose?
| Situation | Recommended choice |
|---|---|
| Any new application: web, API, microservice, console, cloud | .NET (Core), latest LTS version |
| Application must run on Linux, in Docker or on Kubernetes | .NET (Core) |
| High performance or high traffic is important | .NET (Core) |
| Existing, stable .NET Framework app that rarely changes | Keep it on .NET Framework 4.8.1; plan a migration only if there is a business reason |
| App built on Web Forms, WCF server or Workflow Foundation | Stay on .NET Framework for now, or plan a rewrite of those parts |
| A library that must be used by both old and new applications | Target .NET Standard 2.0, which both platforms can use |
How companies migrate from .NET Framework to .NET Core
Large applications are usually migrated step by step, not all at once:
- Analyse the application: which projects, NuGet packages and APIs are used, and which are not available in modern .NET. Microsoft provides upgrade tools that report these problems and can convert project files automatically.
- Upgrade class libraries first: move business logic and data access to .NET Standard 2.0 or modern .NET, so they can be shared during the move.
- Replace unsupported technologies:
System.Webcode with ASP.NET Core, WCF services with Web API or gRPC (or CoreWCF), Entity Framework 6 with EF Core when ready. - Migrate the web application gradually: a common approach (the "strangler fig" pattern) puts a new ASP.NET Core app in front of the old one and moves pages or endpoints over one by one.
- Test thoroughly and deploy, often to Linux containers once everything runs on modern .NET.
Interview questions and answers
1. What is the main difference between .NET Framework and .NET Core?
.NET Framework is the original Windows-only platform, now in maintenance mode at version 4.8.1. .NET Core is a cross-platform, open-source, high-performance rewrite that runs on Windows, Linux and macOS and receives new features every year. Since version 5 it is simply called .NET.
2. Is .NET Core the same as .NET 5, 6, 7, 8?
Yes. .NET 5 and later are the continuation of .NET Core. Microsoft skipped version 4 (to avoid confusion with .NET Framework 4.x) and dropped "Core" from the name.
3. Is .NET Framework dead?
No, but it is finished. .NET Framework 4.8.1 is still supported with security and reliability fixes as part of Windows, so existing applications are safe. But no new features will be added, so new projects should use modern .NET.
4. Can a .NET Core application run on Linux?
Yes. Console apps, ASP.NET Core web apps, APIs and background services run on Linux and macOS as well as Windows. WinForms and WPF desktop apps are the exception: they run on modern .NET but only on Windows.
5. Why is .NET Core faster than .NET Framework?
It was redesigned with performance as a goal: the fast Kestrel web server, a lighter request pipeline without System.Web, tiered JIT compilation, Span<T> to avoid memory allocations, System.Text.Json, and continuous runtime improvements in every release.
6. Which .NET Framework technologies are not supported in .NET Core?
ASP.NET Web Forms, hosting WCF services (only a WCF client is available; CoreWCF is a community alternative), Windows Workflow Foundation, .NET Remoting, multiple AppDomains and Code Access Security.
7. What is .NET Standard?
.NET Standard is a specification of APIs that all .NET implementations agree to support. A class library that targets .NET Standard 2.0 can be used by both .NET Framework (4.6.1+, ideally 4.7.2+) and .NET Core, which makes it very useful during migrations. For new libraries that only need to run on modern .NET, target a .NET version (for example net8.0) directly.
8. What is the difference between framework-dependent and self-contained deployment?
A framework-dependent app needs the .NET runtime installed on the machine and is smaller. A self-contained app includes the runtime in its output, so it runs on a machine without .NET installed, at the cost of a larger size. .NET Framework supports only the "installed on the machine" model.
9. Can ASP.NET Core run on .NET Framework?
Only old versions. ASP.NET Core 1.x and 2.x could run on .NET Framework, but from ASP.NET Core 3.0 it runs only on .NET Core / modern .NET.
10. What are LTS and STS releases?
LTS (Long Term Support) releases, the even-numbered versions such as .NET 8 and .NET 10, are supported for three years and are preferred for production. STS (Standard Term Support) releases, the odd-numbered ones, have a shorter support period and suit teams that want the newest features and upgrade often.
11. Does .NET Framework have built-in dependency injection?
No. In .NET Framework you add a third-party container such as Unity, Autofac or Ninject. ASP.NET Core has dependency injection built in and uses it everywhere.
12. You have a large .NET Framework MVC application. Would you migrate it to .NET Core?
It depends on the business value. If the application is actively developed, needs better performance, must move to Linux or the cloud, or depends on libraries that are leaving .NET Framework, then yes: migrate step by step, starting with class libraries, then moving controllers and pages gradually. If it is stable and rarely changes, keeping it on .NET Framework 4.8.1 is a reasonable choice. A good answer weighs cost, risk and benefit instead of saying "always migrate".
Summary
- .NET Framework (2002) is Windows-only, mature and supported, but receives no new features; its final version is 4.8.1.
- .NET Core (2016), called just ".NET" from version 5, is cross-platform, open source, faster and improved every year.
- .NET Core brings built-in dependency injection, unified MVC and Web API, Kestrel, side-by-side and self-contained deployment, and container support.
- Web Forms, WCF server, Workflow Foundation, .NET Remoting and AppDomains are not available in .NET Core.
- .NET Framework's strength is stability for existing apps; .NET Core's cost is regular upgrades and migration effort.
- Choose modern .NET (latest LTS) for every new project; keep or gradually migrate existing .NET Framework applications.