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 the entry on “History of C#”. But in summary, .NET was initially .NET Framework.
At some point, Microsoft decided to get “fancy” 🤡 and split .NET into parts to make it cross-platform. That complicated things a lot, so they reunified it into .NET (plain).
So we have:
- .NET Framework, the classic (original flavor)
- .NET Core and .NET Standard, the failed experiment
- .NET the modern reunification
Let’s look at them in a bit more depth 👇.
.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 .NET Framework implementation includes a virtual machine, the CLR, which runs applications in a controlled runtime environment.
Furthermore, 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 applications developed with it cannot run natively on other operating systems.
.NET Core and Standard
This is where Microsoft thought about enhancing .NET to make it cross-platform. Basically, the idea was that there are “many things” that are done the same on 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 complete the implementation. And these were called .NET Core.
.NET Core
.NET Core is a cross-platform, open-source version of the .NET ecosystem, first released in 2016. It was intended 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 seen and audited directly on GitHub.
.NET Standard
.NET Standard is not a platform or implementation (like .NET Framework or .NET Core), but rather an API specification. That is, .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.
Was that going to work out well the first time? Well, I can tell you it didn’t. Because there are also different versions of .NET Standard. Here’s a summary of the compatibility of each one.
APIs available: 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 |
APIs available: 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 |
APIs available: 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 |
APIs available: 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 |
APIs available: 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 |
APIs available: 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 |
APIs available: 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 |
APIs available: 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 |
APIs available: 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 (functionalities) it has
- But it loses compatibility with versions earlier than the one I list
If you have to use .NET Standard, version 2.0 gives you the best compromise between functionality and compatibility
.NET
As I said before, the above “didn’t work out so well”. So it was decided to reunify it into .NET (plain). Starting from version .NET 5 and subsequent versions, the .NET ecosystem has been unified into a single platform.
