by Chris Simon
Principal Consultant at CMD Solutions

If you’re still running .NET Framework applications, you’re not alone – estimates suggest that over 7,000,000 websites are running on ASP.NET. In this series of posts, we’ll explore what’s involved in modernising a .NET Framework application to .NET 6.0 – Microsoft’s radical re-imagining of .NET as an open-source, a high-performance, cross-platform & cloud-native framework.  Part 1 will explore the benefits of modernisation and help engineering managers and technical leadership decide when and why to modernise. Part 2 will discuss approaches to support a progressive migration from an architectural perspective and help architects plan a modernisation.  Part 3 will take a deep dive into some tools that can support migration and help developers with executing a migration. 

Introduction

History of .Net

.NET was first introduced to the world in 2002 in the form of the .NET Framework v1.0.  With a focus on the needs of enterprise developers and on a mission to assure Windows as an operating system of choice, the .NET Framework evolved into an application platform with a broad suite of capabilities, supporting web applications, service-oriented architectures & desktop applications. By design it was tightly coupled to the Windows Operating System and developer tool licensing kept it primarily in the enterprise and corporate development space.

In the years since .NET Framework was released, the software development landscape has changed dramatically.  Driven by the meteoric rise of Saas startups, open source frameworks, linux, containers and the cloud have become technology fundamentals.

In 2014 Microsoft responded to this change with .NET Core – a radical re-imagining of .NET.  It was open-source, cross-platform (enabling use on lightweight linux containers) and with libraries and framework elements intended to support modern web application development practices.  At first, it was missing many capabilities available in its older cousin, but over the years .NET Core has matured in both capability, performance and tooling, and in 2020 with the release of .NET 5.0, Microsoft has merged the roadmaps of .NET Framework and .NET Core.

The new release owes more to the .NET Core lineage, but as the ‘singular future’ of .NET it is now known as just “.NET”, dropping any reference to ‘core’ or ‘framework’.

What’s In A Name?

Although .NET 5.0 and 6.0 have dropped the ‘core’ terminology, don’t be confused if you still see the word ‘core’ floating around.  ASP.NET Core (the .NET library for building web and api applications) and EntityFramework Core (the .NET library for database persistence) have both kept “Core” in their names.  Despite the risk of confusion, Microsoft made this decision when .NET 5.0 was released to avoid confusion from older versions of both libraries that were known as ‘v5’ but were only compatible with .NET Framework.

Going forward both ASP.NET Core and EntityFramework (EF) Core will retain the ‘Core’ suffix but the version numbers will stay in lockstep with the main .NET version.

What of .NET Framework?

Although .NET Framework and .NET Core co-existed for many years, the last release of .NET Framework was .NET Framework 4.8 in 2019.  Version 4.6.1 and earlier will no longer be supported by Microsoft from 26th April 2022.

Versions 4.6.2 up to 4.8 remain supported and will continue to receive security updates – but no new features or enhancements.

Why Modernise?

.NET Framework End of Life

Depending on the version of .NET Framework you’re currently using, you may need to urgently upgrade, even if you don’t completely modernise to .NET 6.0.

4.6.1 or Earlier?

If you’re on a version of .NET Framework 4.6.1 or earlier, you should prioritise an upgrade to .NET Framework 4.8 as soon as possible, or risk running an insecure framework, as these versions will be End of Life from Microsoft from April 26, 2022.

4.6.2 or Later?

If you’re on 4.6.2 or later, you may be wondering what value there is in modernising?  After all, you’ll continue to receive security updates and support from Microsoft into the future as long as you are using a supported operating system.

In the next sections we’ll explore a few reasons why modernising .NET Framework to .NET 6.0 is still likely to be a good idea for any application under ongoing development.

Reduced Hosting Costs & Improved Resilience

The most obvious technical change in the .NET Core lineage is cross-platform compilation and there are a number of outcomes unlocked by the use of lightweight linux containers. 

Whether you like the hands-off ease of an all-in-one container platform like AWS Fargate, a serverless solution like AWS Lambda, or are looking for the bells, whistles & fine tuned customizability of a bespoke Kubernetes deployment (e.g. AWS EKS), modernising to .NET 6.0 will unlock your ability to run your .NET apps with the lower hosting cost & improved resilience provided by modern container platforms.

Performance

Microsoft has invested heavily in performance, especially in .NET 6.0.  Some benchmarks indicate up to ~40% performance improvement from .NET 5.0 to .NET 6.0!

If your .NET Framework app is being stretched to the limit, modernising to .NET 6.0 could be just the thing needed to give you an improved performance budget, and a better user experience.

Security & Support

In line with the focus on a modern cross-platform experience, .NET receives regular updates every 1-2 months with security patches and other improvements.  

While Microsoft has committed to maintaining security patches for .NET Framework 4.6.2 and up, there’s no doubt that the focus and attention is on the latest releases of .NET.  And if you’ve modernised to a container-based platform, updating is as simple as bumping the BASE image version for your application.

Developer Experience & Relevance

Given Microsoft’s focus, developers are upskilling and looking for opportunities to utilise their new skills, and in today’s competitive recruitment market, developers have their choice of organisations to work for.  Given both the improved developer experience, and the perception that all ‘new’ work is in .NET, modernising will make retaining your quality developers who are already experts in your system and domain and are looking for ways to maintain their skill relevance much easier. In addition, hiring developers to work on .NET Framework applications is going to get more and more challenging in the years ahead.

Beyond the recruitment lens, the developer experience in .NET is a key focus. Improvements in tooling & runtime as well as the ability to develop and debug in local containers that are configuration equivalent to production runtime improves developer flow and productivity.

Modernising now to maintain your status as an employer of choice for .NET developers is an investment in the longevity of your business and system.

What’s Next?

If you’re looking for assistance planning and executing such a modernisation, CMD Solutions can help! With expertise in cloud architecture, software architecture, devops and implementation, CMD Solutions can help put you on the right path towards a successful and valuable modernisation project.

Stay tuned for Part 2: Modernising .NET Framework to .NET 6.0, where we’ll explore specific technical tools to assist with your modernisation, and Part 3: Architectural Strategies for Modernisation where we’ll discuss practical approaches to modernising a large production codebase.

Summary

In this post, we’ve reviewed the history and status of .NET Framework and .NET Core/5.0/6.0.  We’ve also explored a number of compelling reasons to consider a modernisation effort to .NET 6.0, including:

  1. .NET Framework is reaching end of life
  2. Improved Performance
  3. Enhanced Security & Support
  4. Developer Experience & Relevance