One of the things that confuses people the most when talking about .NET is understanding the different types of .NET that exist.
For a slightly longer version, check out the entry on “History of C#.” But in summary, .NET was originally .NET Framework.
At some point, Microsoft decided to get “creative” 🤡 and split .NET into parts to make it cross-platform. This complicated things quite a bit, so they unified it back into .NET (just that).
So we have:
- .NET Framework, the classic (with original flavor)
- .NET Core and .NET Standard, the failed experiment
- .NET, the modern reunification
Let’s take a closer look at them 👇.
.NET Framework
.NET Framework is the original implementation of .NET released by Microsoft in 2002, primarily for developing desktop and web applications on Windows.
The implementation of .NET Framework includes a virtual machine, the CLR, which runs applications in a controlled execution environment.
Additionally, it includes a large number of libraries, data access (ADO.NET), web services (WCF), web application development (ASP.NET), and desktop applications (WinForms, WPF).
.NET Framework is designed exclusively for Windows, which means that applications developed with it cannot run natively on other operating systems.
.NET Core and Standard
This is where Microsoft aims to enhance .NET to make it cross-platform. Basically, the idea was that there are “many things” that are done the same across all platforms.
For example, a library that performs mathematical functions will run the same across all platforms. So all those libraries can be “taken out” to a common area, which we call .NET Standard.
Things that depend on the Operating System (for example, how to manage files) are what finish the implementation. And these are referred to as “Core”.
.NET Core
.NET Core is a cross-platform and open-source version of the .NET ecosystem, first released in 2016. It was designed to replace .NET Framework.
The main idea behind .NET Core was to be able to run on multiple operating systems. Thus, you could have your same app on Windows, Linux, Mac, iOS, Android, etc.
Being open-source, it allows the community to contribute to and improve the platform, and its updates can be viewed and audited directly on GitHub.
.NET Standard
.NET Standard is not a platform or implementation (like .NET Framework or .NET Core), but an API specification. In other words, .NET Standard defines a set of APIs that any .NET implementation must comply with.
Its goal is to provide a way to create class libraries that can run on multiple .NET platforms without needing to be rewritten for each one.
Did that go well the first time? I can tell you that it didn’t. Because there are also different versions of .NET Standard. Here’s a summary of the compatibility of each one.
Available APIs: 7,949 of 37,118 (21.4%)
.NET Implementation | Version Support |
---|---|
.NET and .NET Core | ✅ 1.0 |
.NET Framework | ✅ 4.5 |
Mono | ✅ 4.6 |
Xamarin.Android | ✅ 7.0 |
Xamarin.iOS | ✅ 10.0 |
Universal Windows Platform (UWP) | ✅ 8.0 |
Unity | ✅ 2018.1 |
Available APIs: 10,239 of 37,118 (27.6%)
.NET Implementation | Version Support |
---|---|
.NET and .NET Core | ✅ 1.0 |
.NET Framework | ✅ 4.5 |
Mono | ✅ 4.6 |
Xamarin.Android | ✅ 7.0 |
Xamarin.iOS | ✅ 10.0 |
Universal Windows Platform (UWP) | ✅ 8.0 |
Unity | ✅ 2018.1 |
Available APIs: 10,285 of 37,118 (27.7%)
.NET Implementation | Version Support |
---|---|
.NET and .NET Core | ✅ 1.0 |
.NET Framework | 🟡 4.5.1 |
Mono | ✅ 4.6 |
Xamarin.Android | ✅ 7.0 |
Xamarin.iOS | ✅ 10.0 |
Universal Windows Platform (UWP) | 🟡 8.1 |
Unity | ✅ 2018.1 |
Available APIs: 13,122 of 37,118 (35.4%)
.NET Implementation | Version Support |
---|---|
.NET and .NET Core | ✅ 1.0 |
.NET Framework | 🟠 4.6 |
Mono | ✅ 4.6 |
Xamarin.Android | ✅ 7.0 |
Xamarin.iOS | ✅ 10.0 |
Universal Windows Platform (UWP) | 🟠 10.0 |
Unity | ✅ 2018.1 |
Available APIs: 13,140 of 37,118 (35.4%)
.NET Implementation | Version Support |
---|---|
.NET and .NET Core | ✅ 1.0 |
.NET Framework | ✅ 4.5 |
.NET Framework | 🟠 4.6.1 |
Xamarin.Android | ✅ 7.0 |
Xamarin.iOS | ✅ 10.0 |
Universal Windows Platform (UWP) | 🟠 10.0 |
Unity | ✅ 2018.1 |
Available APIs: 13,355 of 37,118 (36.0%)
.NET Implementation | Version Support |
---|---|
.NET and .NET Core | ✅ 1.0 |
.NET Framework | 🟠 4.6.1 |
Mono | ✅ 4.6 |
Xamarin.Android | ✅ 7.0 |
Xamarin.iOS | ✅ 10.0 |
Universal Windows Platform (UWP) | 🟠 10.0.16299 |
Unity | ✅ 2018.1 |
Available APIs: 13,501 of 37,118 (36.4%)
.NET Implementation | Version Support |
---|---|
.NET and .NET Core | ✅ 1.0 |
.NET Framework | 🟠 4.6.1 |
Mono | ✅ 4.6 |
Xamarin.Android | ✅ 7.0 |
Xamarin.iOS | ✅ 10.0 |
Universal Windows Platform (UWP) | 🟠 10.0.16299 |
Unity | ✅ 2018.1 |
Available APIs: 32,638 of 37,118 (87.9%)
.NET Implementation | Version Support |
---|---|
.NET and .NET Core | 🟠 2.0 |
.NET Framework | 🟠 4.6.1 |
Mono | 🟠 5.4 |
Xamarin.Android | 🟠 8.0 |
Xamarin.iOS | 🟠 10.14 |
Universal Windows Platform (UWP) | 🟠 10.0.16299 |
Unity | ✅ 2018.1 |
Available APIs: 37,118 of 37,118 (100%)
.NET Implementation | Version Support |
---|---|
.NET and .NET Core | 🟠 3.0 |
.NET Framework | ❌ |
Mono | 🟠 6.4 |
Xamarin.Android | 🟠 10.0 |
Xamarin.iOS | 🟠 12.16 |
UWP | ❌ |
Unity | 🟠 2021.2 |
- The higher the Standard version, the more APIs (features) it has.
- But it loses compatibility with versions prior to the one I mention.
If you have to use .NET Standard, version 2.0 is the best compromise between features and compatibility.
.NET
As I said before, the previous “didn’t go so well.” So it was decided to reunify it into .NET (just that). Since version .NET 5 and successive versions, the .NET ecosystem has been unified into a single platform.