To summarize what happened in the ASP.NET world within the last four years is not an easy task; in short words, we can say that we’ve undoubtedly witnessed the most important series of changes in .NET Framework since the year it came to life: a revolution that changed the whole Microsoft approach to software development in almost every way. To properly understand what happened through these years it can be useful to identify some distinctive keyframes within a slow yet constant journey that allowed a company known (and somewhat loathed) for its proprietary software, licenses, and patents to become a driving force for open-source development worldwide.
The first relevant step, at least in my humble opinion, was taken on April 3, 2014, at the annual Microsoft Build Conference that took place at the Moscone Center (West) in San Francisco: it was there, during a memorable keynote speech, that Anders Hejlsberg — father of Delphi and lead architect of C# — publicly released the first version of the .NET Compiler Platform, known as Roslyn, as an open-source project; and it was also there that Scott Guthrie — Executive Vice President of the Microsoft Cloud and AI group — announced the official launch of the .NET Foundation, a nonprofit organization aimed to improve open-source software development and collaborative work within the .NET ecosystem.
Starting from that pivotal day, the .NET Development team published a constant flow of Microsoft open-source projects on the GitHub platform, including: Entity Framework Core (May 2014), TypeScript (October 2014), .NET Core (October 2014), CoreFX (November 2014), CoreCLR & RyuJIT (January 2015), MSBuild (March 2015), .NET Core CLI (October 2015), Visual Studio Code (November 2015), .NET Standard (September 2016), and so on.
ASP.NET Core 1.x
The most important achievement brought by these efforts towards the open-source development was the public release of ASP.NET Core 1.0, which came out in Q3 2016. It was a complete re-implementation of the ASP.NET Framework that we knew since January 2002 and that had evolved — without significant changes in its core architecture — up to version 4.6.2 (August 2016); the brand new framework united all the previous web application technologies, such as MVC, Web API, and web pages, into a single programming module, formerly known as MVC6. The new framework introduced a fully-featured cross-platform component, also known as .NET Core, shipped with the whole set of open-source tools which we mentioned above: a compiler platform (Roslyn), a cross-platform runtime (CoreCLR), and an improved x64 Just-In-Time compiler (RyuJIT).
Someone might be wondering about what happened to ASP.NET 5 and Web API 2, as these used to be quite popular names until mid-2016.
ASP.NET 5 was no less than the original name of ASP.NET Core, before the developers chose to rename it to emphasize the fact that it is a complete rewrite. The reasons for that, along with the Microsoft vision about the new product, are further explained in the following Scott Hanselman’s blog post that anticipated the changes on Jan 16, 2016:
For those who don’t know, Scott Hanselman is the outreach and community manager for .NET/ASP.NET/IIS/Azure and Visual Studio since 2007. Additional information regarding the perspective switch is also available in the following article by Jeffrey T. Fritz, Program Manager for Microsoft and NuGet team leader:
As for Web API 2, it was a dedicated framework for building HTTP services returning pure JSON or XML data instead of web pages. Initially born as an alternative to the MVC platform, it has been merged with the latter into the new, general-purpose web application framework known as MVC6, which is now shipped as a separate module of ASP.NET Core.
The 1.0 final release was shortly followed by ASP.NET Core 1.1 (Q4 2016), which brought some new features and performance enhancements, and also addressed many bugs and compatibility issues affecting the former one. The new features include the ability to configure middleware as filters (by adding them to the MVC pipeline rather than the HTTP request pipeline); a built-in, host-independent URL rewrite module, made available through the dedicated Microsoft.AspNetCore.Rewrite NuGet package; View Components as tag helpers; View compilation at runtime instead of on-demand; .NET native Compression and Caching middleware modules; and so on.
For a detailed list of all the new features, improvements and bug fixes of ASP.NET Core 1.1, check out the following links:
ASP.NET Core 2.x
Another major step was taken with ASP.NET Core 2.0, which came out in Q2 2017 as a preview and then in Q3 2017 for the final release. The new version featured a wide number of significant interface improvements, mostly aimed to standardize the shared APIs among the .NET Framework, .NET Core and .NET Standard in order to make the last two more backward-compatible with the former: thanks to these efforts, moving existing .NET Framework projects to .NET Core and/or .NET Standard became a lot easier than before, giving many “traditional” developers the chance to try and adapt to the new paradigm without losing their existing know-how.
Again, the major version was shortly followed by an improved and refined one: ASP.NET Core 2.1, officially released on May 30, 2018, introduced a series of additional security & performance improvements and a bunch of new features, including: SignalR, an open-source library that simplifies adding real-time web functionality to .NET Core apps; Razor class libraries, a significant improvement in Razor SDK that allows developers to build views and pages into reusable class libraries and/or library projects that could be shipped as NuGet packages; Identity UI library & scaffolding, to add identity to any app and customize it to meet your needs; HTTPS support enabled by default; built-in GDPR support using privacy-oriented APIs and templates that give users control over their personal data and handle cookie consent; Updated SPA templates for Angular and ReactJS client-side frameworks; and much more.
For a detailed list of all the new features, improvements and bug fixes of ASP.NET Core 2.1, check out the following links:
Wait a minute: did we just say Angular? Yeah, that’s right. As a matter of fact, ASP.NET Core has been specifically designed to seamlessly integrate with popular client-side frameworks such as ReactJS and Angular since its initial release. The major difference introduced in ASP.NET Core 2.1 is that the default Angular and ReactJS templates have been updated to use the standard project structures and build systems for each framework (Angular CLI and NPX‘s create-react-app command) instead of relying on task runners like Grunt or Gulp, module builders like Webpack or toolchains such as Babel, which were widely used in the past although being quite difficult to install and configure.
After six months from the release of the 2.1 version, the .NET Foundation came out with a further improvement: ASP.NET Core 2.2 was released on December 4, 2018 with several fixes and new features: an improved endpoint routing system for a better dispatching of requests; updated templates, featuring Bootstrap 4 and Angular 6 support; A new health checks service to monitor the status of deployment environments and their underlying infrastructures, including container-orchestration systems such as Kubernetes; built-in HTTP/2 support in Kestrel; a new SignalR Java Client to ease the usage of SignalR within Android apps; and so on.
For a detailed list of all the new features, improvements and bug fixes of ASP.NET Core 2.2, check out the following links:
ASP.NET Core 3.x
ASP.NET Core 3 has been released on September 2019 and comes with another bunch of performance & security improvements and new features, such as: Windows desktop applications support (Windows only), with advanced importing capabilities for Windows Forms and Windows Presentation Foundation (WPF) applications; C# 8 support; .NET Platform-Dependent Intrinsic access through a new set of build-in APIs, that could bring significant performance improvements in certain scenarios; Single-file executables support via the dotnet publish command using the <PublishSingleFile> XML element in project configuration or through the /p:PublishSingleFile command-line parameter; a new built-in JSON support featuring high-performances and low allocation, arguably 2x-3x faster than the Json.NET third-party library (which became a de-facto standards in most ASP.NET web projects); TLS 1.3 & OpenSSL 1.1.1 support in Linux; some important security improvements in the System.Security.Cryptography namespace, including AES-GCM and AES-CCM ciphers support; and so on.
A lot of work has also been done to improve the performance and reliability of the framework when used in a containerized environment. The ASP.NET Core development team put a lot of our effort to improve the .NET Core Docker experience on .NET Core 3.0. More specifically, this is the first release featuring substantive runtime changes to make CoreCLR more efficient, honor Docker resource limits (such as memory and CPU) better by default, and offer more configuration tweaks. Among the various improvements, we could mention an improved memory and GC heaps usage by default, and PowerShell Core, a cross-platform version of the famous automation and configuration tool which is now shipped with the .NET Core SDK Docker container images.
Last but not least, it’s worth noting that the new .NET Core SDK is much smaller than the previous installments, mostly thanks to the fact that the development team removed from the final build a huge set of non-required artifacts included in the various NuGet packages that were used to assemble the previous SDKs (including ASP.NET Core 2.2), thus wasting a lot of space. The size improvements are huge for Linux and macOS versions, while less noticeable on Windows because that SDK also contains the new WPF and Windows Forms set of platform-specific libraries.
For a detailed list of all the new features, improvements and bug fixes of ASP.NET Core 3.0, check out the following links:
- Release notes: https://docs.microsoft.com/en-us/dotnet/core/whats-new/dotnet-core-3-0
- ASP.NET Core 3.0 releases page: https://github.com/dotnet/core/tree/master/release-notes/3.0
That’s it, at least for now: I hope that this quick recap will be useful for those who wanted to get a gist of the whole ASP.NET Core history from its birthday to the present days. If you liked this recap don’t forget to take a look at following post, which does the same thing with Angular: