.NET Framework is dead, long live .NET!
.NET 5 is released; VB.NET is... stable, and the hipster C# (F#) gets some updates.
📢 .NET 5 has been released. As a reminder, .NET Framework 4.8 is the last, and dare I say, legacy version of .NET. .NET 5 is .NET Core 3.1 renamed to .NET, so that going forward -- at least in name, .NET is unified. .NET 6 will actually unify all the different frameworks under the umbrella of .NET, but 5 is the aspirational name change.
As a minor note, ASP.NET Core on .NET 5 is the name for ASP.NET Core. It works, as long as you don't think about it too hard. Also "Core" is an overloaded term now. Enjoy!
🆕 With .NET 5, "Single File Applications" are now Generally Available. A single file application is not what it sounds like because naming is hard. 'File' here means 'output file', not source code file (that will become important in a minute). With .NET 5 you can now deploy a statically linked executable that contains the runtime and everything it needs in a single file. If you've created a Go application, this is that. Also note that it appears they've now changed the name from "Single file application" to "Single file Deployment", which is a good name change in my opinion.
🆕 Also with .NET 5, you can now have a... sigh.. single source code file application with what the .NET team calls "Top Level Statements". Instead of the ceremony with static void main; you can just start diving in to the code and it'll just work.
.NET 5 will not offer replacements for ASP.NET Webforms, WCF, Windows Workflow Foundation. If you want to adopt .NET 5, then you'd need to look at their alternatives; which are ASP.NET Core Blazor, gRPC, and Open-source CoreWF respectively. I feel bad for the half of you that will never be able to adopt .NET 5 because your business is running on Webforms and there is no upgrade path without a rewrite.
🆕 System.Text.Json Aka Microsoft's "Newtonsoft Json replacement" has got some new features. If you're adopting .NET 5, you're going to want to pay attention, as Newtonsoft.Json is no longer being developed. If you are just catching up, they hired JNK about a year ago and quickly put Newtonsoft.Json out to pasture. System.Text.Json is your new replacement.
🆕 C# 9 records are now generally available. A record is a way to effectively have an (almost) immutable DTO without all of the ceremony that DTOs used to take. If you have a property-based object with no behavior (methods), then you should strongly consider a record.
🆕 C# 9 also brings us "enhanced pattern matching" which is a fancy phrase for "one step closer to Perl". That's great for me since I love perl, but can you imagine trying to debug this?
public static bool IsLetterOrSeparator(this char c) => c is (>= 'a' and <= 'z') or (>= 'A' and <= 'Z') or '.' or ',';
🆕 C# 9 also allows you to omit the declaration of the type when constructing a new object Was typing really that hard? In an ideal world where people wrote maintainable code by default this is a nice change; but here in the real world I can already imagine the stuff we're going to see five years from now with this change.
private List<WeatherObservation> _observations = new(); var forecast = station.ForecastFor(DateTime.Now.AddDays(2), new()); WeatherStation station = new() { Location = "Seattle, WA" };
Your choice is to now either be var based or this new-fangled (sorry) new() based. We did not need another programming holy war, but it appears we're going to get it.
There are more C# 9 changes; but those are the highlights.
🆕 The hipster's C# has also gotten updates -- F# 5 is now generally available. The blog post says there are several updates, but it appears like "Several" is doing a lot of heavy lifting in that sentence. That I can see there are two updates: String Interpolation and Typed Interpolation. Hooray?
📢 Visual Basic for .NET 5 has been released. There are no new updates (and no more language updates are planned), but VB.NET will support the project types that C# supports. Look at the flowers, VB.
📢 .NET 5 supports Web Assembly through Client-side Blazor, and Blazor has gotten several improvements. This is cool, but the target isn't people who are using JavaScript... It's... Webforms? Microsoft, among others, has tried several times to knock JavaScript off of its throne was the go-to language for Rich Internet Applications, and it hasn't worked yet -- but the Webforms folks need a new approach, and Blazor provides that.
📢 EF Core 5 for .NET 5 has been released I can't make it through the 81+ features they've added since 3.1 without worrying for the health of the EF team, but I'll at least try to hum a few bars: Many to Many relationships, EF Core CLI, ChangeTracker.Clear, Improved Code First Scaffolding, and more. Yes, and more.
📢 .NET Core 3.1.10 has been released. This is a bugfix release; centered mostly on EF Core 3.1 and ASP.NET Core.
📝 Ten ways your data project is going to fail to which I reply -- only 10? That's a much more manageable number than usual.
📝 Everything you wanted to know about Nuget Package versioning Look this stuff is not fun to read about; but sooner or later you or someone you love will spend a few days mired in package versioning hell, so bookmark this for that eventuality.
📝 Dave Brock shows you how to update the tag with Blazor. If you adopt blazor you now get to learn new ways of doing those things you already knew how to do in JavaScript. Weeeee.
📰 Mads Torgerson talks about why C# is popular and where it's going from here C# is popular with businesses and its leg up on JavaScript is that it's stable. If the JS folks ever figure that out, C# is in trouble, but we're not ready to have that discussion yet.
📝 .NET IoT Libraries documentation has been published. I like this as it makes low level programming approachable with C#. I wish this had been available for me a few years ago. Instead I was stuck in the hellscape that is embedded C with tens of people in the world using bespoke Q&A sites to figure out what's going wrong.
📢 DevExpress 20.2 has been released Every company I've been a part of was either using DevExpress or trying like hell to get away from it. Which are you?
📢 AWS Supports .NET 5 this is sort of a hand-wavy gesture because no part of me is checking the dozens of Amazon services to see if it works across all of them, but I'll take amazon's word for it.
📢 Powershell 7.1.0 has been released with support for .NET 5. There is a very small crowd that loves powershell, and I'm not about to cross them because they are zealous about their love for Powershell.
Guido Van Rossum, previous BDFL for Python, has joined Microsoft ("For Life" is a vague term). It's also vague what he will be doing, but apparently it will involve the intersection of Python and Microsoft. I'd be excited for a faster Python running on the .NET runtime.
🎥 Migrating 200 applications to .NET Core This .NETConf talk goes into the process of migrating applications to .NET Core; it's a wonderful talk and worth your time.
📝 Mathew McDonald ssks, does .NET 5 deliver on its promises? This is a longer read, but there are lots of good tidbits here, including one that I initially missed: Single file Applications only work on Linux. On MacOS and Windows, there is nothing 'single' about the Single File Application deployment.
📝 Ayende (of NHibernate and RavenDB fame) talks about the reasons why you should always profile set with his own performance regression stories. I love reading Ayende's stuff, I always learn something.
📅 .NET Conf was November 18-20; there's a list of the sesssions here (81 of them!), and there's something for everyone. Here's just a taste:
Blazor:
- A talk for Trailblazers, Blazor in .NET 5
- Modern Web Development with Blazor and .NET 5
- Blazor: Client Side vs. Server Side: Hands on Development and Deployment
- Migrating a Windows Forms App to Blazor: The Amazing and True Story of GIFBot
- Microfrontends with Blazor: Welcome to the Party!
Entity Framework:
- Entity Framework Core 5.0: The Next Generation for Data Access
- Get a Head Start with Entity Framework Core 5.0 with EF Core Power Tools
Xamarin:
- Xamarin.Forms 5: Beautiful and Fast Apps with Less Code
- Cross-platform Applications with Xamarin.Forms
- 3D Printed Bionic Hand - a Little IoT and a Xamarin Mobile App
- ML.NET, Azure and Xamarin: Best Friends Forever
- Validation Rules for Xamarin
.NET 5
- Keynote: Welcome to .NET 5
- Porting projects to .NET 5
- Get to know the .NET 5 SDK
- .NET 5 Runtime Deep Dive with Rich Lander and the Architects
- High-performance Services with gRPC: What's new in .NET 5
📢 The .NET Foundation released their "State of the .NET Foundation" during .NET Conf 2020, highlights include 371 sponsored meetups, and 317,000 attendees. The foundation bosts 886 members.
✅ .NET Foundation has released a survey. Take it! (you don't have to be a member of the .NET foundation to take the survey).
And lastly,
🔎 .NET Foundation removed the "Contribution Model" and later reverted that change. No word yet on what's going on. This is an important change If you want to learn more about the .NET Foundation, I've posted a podcast episode on the subject. There are two ways to get your project into the .NET Foundation: 1) You assign the project copyright over to them -- they know own your project, or 2) you sign an agreement to use their contribution model. This change removed option #2, leaving only the option for you to sign over your project's copyright to the .NET foundation, effectively making them the owner. This is, as we say in the biz, "Bad". I'd love to understand the reasoning behind this change so that fear uncertainty and doubt don't take over, but so far no one's talking.