.NET Core vs .NET Framework vs .NET Standard vs .NET vs ASP.NET
Tags: dotnet
Published: 2022-06-08 14:59:39

One of the most frustrating aspects of learning .NET is navigating the confusing naming convention of the .NET ecosystem. In this blog post, I will explain the difference between all these .NET tools.

---
A few weeks ago, I picked up a C# & .NET book because I wanted to learn .NET for backend web development. The book uses console and WPF apps to teach C#. 

After a few chapters, I realized this book wasn’t going to teach me how to make web applications. So I decided to do a search to see what I needed to use in order to create web apps with .NET. This is how I discovered the larger (and confusing) world of .NET.

## What is .NET?
In order to understand the difference between all these .NET tools, it’s important to understand what .NET is. Microsoft calls it a development platform. 

Essentially, .NET consists of the common language runtime (CLR) and the collection of class libraries that make it easier to develop all sorts of applications. 

The CLR performs various tasks in the background. For example, it translates your compiled C# code into code that your machine can understand. The CLR performs other important tasks in the background, but that’s outside the scope of this article.

The class libraries that are part of .NET are created by Microsoft devs (and now the open source community) to make development of applications easier and faster. Again, this is outside the code of the current article.

The important thing to understand is that .NET consists of the CLR and the class libraries. It is not a language. Developers write code in C#, F#, or Visual Basic to use the .NET tools and libraries.

## .NET Framework vs .NET Core vs .NET
The original .NET implementation was introduced in the early 2000’s. Its tools expanded over the years, but it was a platform for creating and running applications on Windows only. 

A new .NET implementation was released In 2016. It got rid of the bloated code from the original .NET implementation AND introduced a cross-platform implementation for running applications on Windows, Linux, and MacOS. 

To distinguish the two .NET implementations, the newer cross-platform implementation was called **.NET Core**, and the older Windows-only implementation was rebranded as **.NET Framework**.

Developers can still use .NET Framework to create Windows-only applications. However, .NET Core is the future of the .NET platform. In fact, since the release of .NET Core 5, Microsoft no longer uses “Core” to distinguish between .NET Framework and .NET Core. .NET Core is now simply **.NET**. 

Additionally, since .NET 5, Microsoft is planning to release new versions of .NET every year (currently in .NET 6 as of writing this blog). This new .NET has unified the various implementations of .NET. But what does that mean, exactly? Let’s talk a bit about the .NET Standard first, and it’ll make more sense later.

## .NET Standard
When .NET Core was first introduced, some but not all code was compatible with .NET Framework. In order to resolve compatibility issues, Microsoft implemented the .NET Standard.

Developers who create class libraries for .NET write code targeting specific versions of the .NET Standard instead of specific versions of .NET Framework or .NET Core. 

For example, writing a library for .NET Standard version 1.4 will guarantee that the library works in the following versions of .NET Core, .NET Framework, and the various other .NET implementations:

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/4zcureua09krpmunpw19.jpg)

.NET Standard 2.1 is the latest and **final release** of the .NET Standard. As you can see below, it does not support .NET Framework. However, devs can still release libraries targeting previous versions of the .NET Standard if they wish to support .NET Framework.

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/tmob7hxqhsn4blm8om65.jpg)

.NET 5+ versions are unifying various of the .NET implementations listed above. This makes it easier for developers to create .NET libraries without having to worry about which versions of which implementations are supported.

For example, developers can now create a .NET 6 library and know that it can be used in various types of applications being created with .NET 6. In essence, .NET 5+ has moved beyond the .NET Standard. That’s why there will no longer be .NET Standard releases.

Still, if developers want, they can still create libraries targeting any of the previous versions of the .NET Standard, just like they can keep using the .NET Framework.

## ASP.NET
This is the .NET tool used for creating web applications. 

There are two versions of the tool. The older version used in the .NET Framework is called **ASP.NET**. The newer version introduced in .NET Core is called **ASP.NET Core**.

Even though .NET Core is simply .NET now, ASP.NET Core still uses the word “Core” to distinguish it from the older version of ASP.NET.

## Keep me honest!
If you see anything that’s wrong or sounds confusing/incorrect, please let me know in the comments.