.NET Core 3.0 shipped a couple of weeks ago, and it seems that Microsoft continues to improve this often-used technology and the lives of developers. We here at Don’t Panic Labs have been using a flavor of .NET Core 2.x on most of our projects for the last year or so. Seeing the continued improvement of .NET Core is good. Here are a few of my favorite additions.
Legacy Support (Mostly)
.NET Core is finally adding some legacy support. It has typically been a very forward-thinking framework, which means that migrating your old stuff to it wasn’t particularly easy. .NET Core 1 was more of a proof-of-concept than a useful framework for shipping actual software. With version 2.0+, Microsoft thought we finally had enough APIs to build real software. With 3.0 you can now start migrating your existing code over to .NET Core. Both WinForms and WPF apps can be migrated over. Unfortunately, WCF was left out. This is a big miss. So if you were excited to finally move over some WCF projects, I’m afraid your day has still not arrived.
Server-side Blazor is pretty exciting. If you haven’t heard of Blazor, it started as a proof-of-concept by Steve Sanderson where he did something that made all C# developers take notice: he had C# running in the browser. The key technology he relied upon was WebAssembly, which allows browsers to basically run compiled code. I haven’t had a chance to play with Blazor yet, but I will soon.
Non-Nullable Reference Types
Non-Nullable Reference Types in C# is a tough phrase to say; lots of words. But it is a great new feature of C# 8.0. With non-nullable reference types, we can prevent those annoying null reference exceptions. With an embedded marker in the code, we can ensure the object is never null. Just the reduction in null checking should be a big win here. This is very cool, and it will hopefully help developers reduce errors in judgment.
Again, another year another release of .NET Core. With each version, it keeps improving a lot. With 3.0, the future (and past) of .NET Core is looking bright (and not nullable).