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 used to be .NET Framework.
At some point, Microsoft decided to get “funny” 🤡 and split .NET into parts to make it cross-platform. That made things quite confusing, so they unified it back into .NET (plain).
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, that runs applications in a controlled runtime 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 aimed to enhance .NET to make it cross-platform. Basically, the idea was that there are “many things” that are done the same way across all platforms.
For example, a library that performs mathematical functions will run the same on all platforms. So all those libraries can be “extracted” to a common area, which we call .NET Standard.
Things that depend on the operating system (for example, how to manage files) are what finalize 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 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 rather a specification of APIs. 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 the need to be rewritten for each one.
Was that going to go well the first time? Well, I can tell you it didn’t. Because there are also different versions of .NET Standard. Here is a summary of the compatibility of each.
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 indicate
If you need to use .NET Standard, version 2.0 offers the best compromise between features and compatibility
.NET
As I mentioned earlier, the previous iteration “didn’t go well.” So it was decided to reunify it into .NET (plain). Since version .NET 5 and successive versions, the .NET ecosystem has been united into a single platform.