Microsoft created the .NET Framework for many of us to write better software that ran on Windows. I’ve spent a good portion of my time developing with .NET Framework code, writing code that ran in web browsers. So ironically, the code did run on a variety of platforms.
And with Mono, there was always a way to write .NET code that ran on other platforms, mostly Linux. I still remember running a .NET application on Windows and another copy on Linux making .NET remoting calls back and forth. It was pretty impressive.
But .NET Framework was pretty much a Windows platform. And in 2016, .NET Framework had been around for 15 years. A good reset was probably in order. That reset was .NET Core.
.NET Core wasn’t the next version of .NET. It was an attempt to make a clean restart. And it had a few obvious goals. The first was to be platform agnostic. .NET Core was made to run on Windows, Mac, and Linux. It also had the clear goal of making .NET’s performance closer to that of Node.js (which was all the rage in 2016, with performance being one of the reasons behind its popularity). Lastly, .NET Core was an attempt to clean up the programming interfaces. .NET had evolved over 15 years, and some of the code was showing its age.
The first version of .NET Core was more of a beta. It was not ready for primetime, but it showed some promise. It most certainly showed that Microsoft would continue to push .NET into the future, but it also showed that Microsoft was willing to “legacy” some .NET code, which would require a migration at some point.
The first version of .NET Core did not live up to the promise, but the next couple of versions…
.NET Framework 2.0 (Generics, Partial Classes, Nullable Types, Anonymous Methods)
.NET Framework 3.0/3.5 (WPF, WF, WCF, Auto-Implemented Properties)
.NET Framework 3.0 (LINQ)
.NET Framework 3.5 SP1 (ADO.NET Entity Framework)
.NET Framework 4.0 (Parallel, Dynamic)
.NET Framework 4.5 (Async)
.NET Core 2.0/2.1
.NET Core 3.0/3.1
.NET Core 5