The History of .NET Versioning
If you are familiar with .NET, you probably know that easy-to-understand versioning is not one of its strong suits. For years, Microsoft has been changing the naming of .NET implementations, but I think they have finally settled into something good. In this blog post, we will attempt to clear up some of the naming and versioning confusion. We will start by covering the base framework implementations and then branch out to the various app models (web, desktop, mobile).
History of .NET Implementations
.NET Framework
Starting way back in 2002, the first .NET Framework version was born. From approximately 2002-2016, .NET Framework was the Microsoft framework of choice for all kinds of development. .NET Framework versions span from 1.0 to 4.8 and 4.8 will be the last version ever produced. .NET Framework is limited to Windows operating systems and despite it not being under active development, there are still many business-critical applications that use it today. Starting in 2016, Microsoft decided to go open-source and cross-platform with their next implementation of .NET, called .NET Core.
.NET Core & .NET
.NET Core has spanned from version 1.0 to 3.1 with 3.1 being the last. The main focus of .NET Core was to make .NET run on more operating systems than just Windows and to go open source In November of 2020, a new implementation of .NET arrived that dropped the Core naming scheme entitled .NET 5. .NET 5 was not a major departure from .NET Core, but rather Microsoft's attempt to consolidate the version naming of .NET implementations. From this point on, .NET is considered open source and cross-platform, which is a huge win for developers and the Microsoft team. A year later in November of 2021, .NET 6 arrived which is the latest Long-Term Support (LTS) version of .NET since .NET Core.
To illustrate the timeline of these implementations we have:
.NET Framework |
.NET Core |
.NET |
1,2,3,4 |
1,2,3 |
5,6 |
The easiest way to remember this timeline is to treat .NET Core as the transitional period that it was.
.NET Standard
The divide between .NET Framework and .NET Core would be a major problem for code sharing and reuse. This is where .NET Standard fits in. .NET Standard is a specification for a set of .NET APIs that are available to both .NET Framework and .NET Core. .NET Standard is a popular choice for NuGet Package authors because it can be referenced by a wide range of .NET implementations. It is also a powerful tool for migration from .NET Framework to .NET Core.
Naming is Hard
There are still some folks who refer to the latest versions of .NET and .NET Core as ".NET Framework". This is probably because .NET never stopped being a "Framework". I have found it easier to refer to .NET Framework 1-4 as Full Framework and to refer to the newest versions of .NET (.NET 5 and .NET 6) as .NET Proper. Hopefully, this confusion will be remediated going forward as Microsoft has converged on the naming of .NET.
Looking into the Future
Microsoft's plan for .NET in the future is to release a new major version of .NET every year in November. Every other year will be an LTS release meaning that Microsoft will support that release of .NET for 3 full years after launch. The schedule right now should look like this.
November 2021 |
November 2022 |
November 2023 |
November 2024 |
… |
.NET 6 (LTS) |
.NET 7 |
.NET 8 (LTS) |
.NET 9 |
-> |
.NET 7 is already in development and preview versions of it can be downloaded right now!
https://devblogs.microsoft.com/dotnet/announcing-net-7-preview-1/
History of .NET App Models
.NET is an ecosystem for a wide variety of types of development. From here on out, we will refer to these types of development as "App Models". The three most common App Models are Web, Desktop, and Mobile. Let's look at the history of each of these app models in .NET
Web
ASP
Before the advent of .NET Framework, Microsoft developed a server-side scripting language called Active Server Pages (ASP). ASP was tightly coupled to the Internet Information Services (IIS) web server implementation. These days, ASP is commonly referred to as Classic ASP.
ASP.NET
With the release of .NET Framework in 2002, came ASP.NET, the successor to Classic ASP. Since ASP.NET was built on the .NET Common Language Runtime, developers had the option to write code in C# and Visual Basic (VB). The common language runtime is one of the neatest parts of .NET as it gives developers the ability to write in a variety of languages that compile to the same intermediate language (IL) this allows for code sharing and reuse between projects that use different languages.
ASP.NET WebForms
Web Forms was released at the same time as ASP.NET in 2002. One of the defining features of the Web Forms approach is the code-behind file setup in which an aspx file is used to define the structure of a page, and an aspx.cs or aspx.vb file is used to write the code that controls how the page functions. With the final version of .NET Framework (4.8), Webforms is no longer receiving new features and bug fixes. It is technically still "supported" by MS, but it would be a bad idea to start any new project in .NET Framework and existing applications should be moved to newer versions of .NET if possible.
Silverlight
In 2007, Microsoft launched a web application framework called Silverlight. It was similar to Adobe Flash in that users and developers had to download a Silverlight client for the applications to work. Silverlight utilized .NET Framework to allow developers to write code in any .NET supported language. Microsoft deprecated Silverlight in 2012 and terminated support for Silverlight with the release of Internet Explorer 11.
ASP.NET MVC
MVC (Model-View-Controller) is a model that arrived in late 2007 that is the successor to ASP.NET Web Forms. It splits the application into 3 layers for business logic, display logic, and input, respectively. Along with MVC also came the Razor View Engine. This powerful engine allows developers to write C# or VB inside of their html using .cshtml or .vbhtml files.
ASP.NET Web API is another model that can be used that doesn’t utilize Views like MVC. It shares similarities to MVC in that Controllers are still used to respond to HTTP requests. Web API decouples the data from needing a view layer and gives the developer the option to write a front-end application in an entirely different framework.
ASP.NET Core
ASP.NET Core was released with .NET Core 1.0 in 2016 and it moves ASP.NET into the open source and cross platform arena. It also brings with it built-in dependency injection and the generic host builder which we know and love today. Within ASP.NET Core, you can choose from a variety of programming models. Web API and MVC are the most popular, but you can also develop in the following programming models:
- Razor Pages
- Blazor (Web Assembly)
- Blazor (Server-Side w/ SignalR)
Desktop
Windows Forms (WinForms)
With the release of .NET Framework in 2002, WinForms was released as a set of APIs to build graphical user interfaces (GUIs) on Windows.
Windows Presentation Foundation (WPF)
With the release of .NET Framework 3.0 in 2006, Windows Presentation Foundation (WPF) was released. It is built on top of DirectX and was the first GUI system developed by Microsoft to use XAML. XAML would go on to be used for a very long time in WPF and other models like Xamarin for mobile development, Silverlight, and others Both WinForms and WPF continue to be available app models for desktop development in the latest versions of .NET.
UWP
Released with Windows Server 2012 and Windows 8, Universal Windows Platform (UWP) is a platform for building apps for all sorts of windows devices including things like the Windows Phone (R.I.P.) and Xbox. Microsoft has officially shifted focus away from UWP onto , which you can read more about here https://docs.microsoft.com/en-us/windows/apps/winui/.
Mobile
Xamarin and Mono
The history of Xamarin is complicated. Xamarin was a company separate from Microsoft that had a history in developing the Mono framework. Miguel de Icaza started the Mono and Xamarin projects that were eventually acquired by Microsoft. Mono was the first attempt at an open-source version of .NET. Miguel de Icaza is extremely well respected in the .NET community for his influence on the early days of Microsoft embracing open-source technology.
Xamarin is technically a company and Xamarin. Forms is the name of the environment agnostic development platform. In 2016, Microsoft acquired Xamarin. These days, Xamarin.Forms is what you would create a .NET based mobile app with. Xamarin.Forms gives developers the ability to write platform agnostic code that can be compiled to work on iOS, Android, and UWP.
Multi-Platform App UI (MAUI)
The successor to Xamarin.Forms will be Multi-Platform App UI (MAUI). While it isn't a huge departure from the Xamarin.Forms, MAUI will leverage .NET 6 and allow for targeting macOS and WinUI in addition to iOS and Android. MAUI will also bring a single project model for developing these platform agnostic apps .
Conclusion
.NET is a mature and vast ecosystem for building applications. Its complicated versioning history is important to understand both looking to the past and the future. I think Microsoft is heading in the right direction from here on out for version naming. We love .NET here at Omnitech and we’re pretty good at it too! If you need assistance with your .NET applications, we’d be glad to help