.NET Platform Differences: Framework, Core, Standard, and Unified
Introduction
The .NET ecosystem features several platforms with overlapping names but distinct purposes: .NET Framework, .NET Core, .NET Standard, and .NET (the unified platform). This diversity often causes confusion for developers. This article clarifies each platform’s role, history, and ideal usage—using current best practices as of 2025.
Key Terminology
.NET Framework
- Purpose: Original Windows-only implementation for building desktop and web apps.
- Status: Legacy (maintenance mode; no active feature development).
- Use Case: Maintain existing Windows desktop applications or projects dependent on Windows-exclusive APIs (e.g., legacy WCF services).
- Version: 4.8.x is the final release (security updates only).
WARNING
Avoid .NET Framework for new projects—it lacks cross-platform support and cloud-native capabilities.
.NET Core
- Purpose: Cross-platform, open-source rewrite of .NET (supports Windows, Linux, macOS).
- Status: Evolved into .NET 5+ (versions 3.1 and older are end-of-life).
- Use Case: Transition to .NET 5+ for active development.
.NET Standard
- Purpose: Specification (not an implementation) defining APIs compatible across multiple .NET platforms.
- Status: Largely superseded by .NET 5+ unification.
- Use Case: Share code between older .NET Framework and modern .NET Core/.NET 5+ projects via .NET Standard 2.0 libraries.
TIP
.NET Standard 2.1 (not supported by .NET Framework) is the last version. Prefer .NET 8+ for new libraries.
.NET (Unified)
- Purpose: Single platform unifying .NET Core and .NET Framework capabilities (since .NET 5).
- Features: Cross-platform, cloud-optimized, open-source, with modern tooling.
- Versions: .NET 5 → .NET 6 (LTS) → .NET 8 (LTS as of 2025).
- Use Case: Default choice for all new applications (web, mobile, desktop, cloud).
Platform Comparison
Platform | Latest Version | Active Development | Cross-Platform | Primary Use Case |
---|---|---|---|---|
.NET Framework | 4.8.x | ✘ (Maintenance) | ✘ (Windows) | Legacy Windows apps |
.NET Core | 3.1 (EOL) | ✘ | ✓ | Transition to .NET 5+ |
.NET Standard | 2.1 | ✘ | ✓ (API spec) | Code sharing between legacy & modern |
.NET (Unified) | 8.0+ | ✓ | ✓ | Modern cloud, web, and mobile apps |
Version History & Evolution
When to Use Which?
New projects:
- Target .NET 8 (LTS) or latest stable version.
xml<!-- Project file example --> <Project Sdk="Microsoft.NET.Sdk"> <PropertyGroup> <TargetFramework>net8.0</TargetFramework> </PropertyGroup> </Project>
Modernizing legacy apps:
- Migrate .NET Framework → .NET 8 using the .NET Upgrade Assistant.
Shared libraries:
- Use .NET Standard 2.0 only if targeting both .NET Framework 4.8 and .NET 5+.
- For .NET 5+ exclusivity, build libraries directly for
net8.0
.
xml<!-- .NET Standard 2.0 library --> <TargetFramework>netstandard2.0</TargetFramework> <!-- Modern .NET 8 library --> <TargetFramework>net8.0</TargetFramework>
Key Takeaways
- .NET Framework → Maintain legacy Windows applications; avoid for new work.
- .NET Core → Transitional artifacts replaced by .NET 5+.
- .NET Standard → Legacy bridge for code sharing (limit to 2.0/2.1).
- .NET 5+ → Unified future for all platforms—build everything here.
All new projects should target the latest LTS release (e.g., .NET 8). Microsoft commits to annual releases with long-term support updates, ensuring backward compatibility with modern .NET.