The .NET Stacks #23: .NET 5 support, migration tools, and links
This week, .NET 5 RC 2 ships, we talk .NET Foundation, and look around the community.
Get yourself a teammate that looks at your code like Prince William looks at KFC.
Here’s what we have this week:
- Understand the release cycles of .NET
- AWS releases open-source migration tool
- An update on ASP.NET Core feedback for .NET 6
- Last week in the .NET world
⏲ Understand the .NET release cycles and support
It’s hard to believe that two weeks from tomorrow, .NET 5 will be generally available. Week by week, we’ve been poking around the improvements between general .NET, ASP.NET Core and Blazor, and EF Core 5, which are all released together now. While the release candidates offer production licenses, on November 10 things will get real.
To that end, you might be wondering when future releases will occur, how Microsoft is supporting .NET 5, and what that means for older versions of .NET Core and .NET Framework. (This isn’t as sexy as Blazor, I suppose, but is important to understand as you plan your app’s future.)
In terms of future releases, new major releases will be released every November.
As you can see, “LTS” and “Current” support will alternate between releases. As a refresher, let’s walk through those.
- Long Term Support (LTS) releases - supported for a minimum of three years (or 1 year after the next LTS ships, whatever is longer). The current LTS releases are .NET Core 2.1 (with end of support on August 21, 2021), and .NET Core 3.1 (December 3, 2022).
- Current releases - supported for 3 months after the next major or minor release ships
.NET 5 is a “Current” release. Typically, you’d have three months to upgrade to 5.1 but Microsoft says they’re no longer doing point releases. When it comes to .NET 6, it’ll be LTS (supported for three years after general availability)—giving you a less hands-on approach. There’s a Twitter discussion on the benefits and drawbacks.
Microsoft has published an official .NET 5 support policy if you want to explore this further.
What about .NET Framework? While .NET Framework is not dead, it’s basically done. All new features will be built on .NET Core. With .NET Framework 4.8 being the last major release for .NET Framework, it’ll only be supported with reliability and security fixes. You aren’t being forced to move .NET Framework apps to .NET Core, and there are no plans to remove .NET Framework from Windows, but you won’t see any feature improvements.
🔨 AWS open-sources .NET Core migration tool
This week, Amazon Web Services (AWS) open-sourced their Porting Assistant for .NET tool, which assists you in porting your .NET Framework apps to .NET Core on Linux. It was first released in July.
AWS says their differentiator is assessing the entire tree of package dependencies and functionality like incompatible APIs—it uses solution files as the starting point, preventing the need to analyze individual binary files. Interestingly, this single tool appears to be more robust than Microsoft’s migration tools.
This begs the question: what does Microsoft offer? For their part, Microsoft has a comprehensive document about migrating from .NET Framework to .NET Core. They also have a list of tools you can utilize.
- The .NET Portability Analyzer, which analyzes your code and provides a report about how portable your code is between Framework and Core
- The .NET API Analyzer, a Roslyn analyzer that detects compatibility in cross-platform libraries
- The Platform Compatibility Analyzer, another Roslyn analyzer that informs devs when using platform-specific APIs from call sites where API might not be supported
- A
try-convert
utility, a .NET Core global tool that helps convert from theproject.json
model to the.csproj
model. Microsoft makes clear it is not supported in any way.
It reminds me of the old American football adage: if you have two quarterbacks, you have none. I’ve heard a common question: shouldn’t Microsoft be leading this charge since … they own .NET and are the most familiar with the platform? Why haven’t they invested in robust migration tooling? I see a few factors at play here.
Considering .NET is a free product, the Microsoft play is to get you on Azure. What’s to prevent you from using their awesome conversion tool and heading over to the competition? From AWS’s standpoint, they’re quite incentivized to do this: the sell for .NET devs is hard enough and they need to make things as easy as possible. If you couple that with the complexities of this tooling, Microsoft seems to be a little leery of making any big investments in that space.
📓 An update on ASP.NET Core feedback for .NET 6
A few weeks ago, I wrote about the GitHub issue you can visit to chime in on the future of ASP.NET Core for .NET 6. I’d like to call out a comment by Muhammad Rehan Saeed that outlines core ASP.NET issues that aren’t Blazor related.
While Blazor is awesome and the future of ASP.NET Core, there are tons of ASP.NET developers who aren’t using it for various reasons and are fine with using MVC or Razor Pages. If you’re interested in providing feedback on those issues, look at Muhammad’s comment—personally, I’m interested in HTTP/3 support, streaming API support for MVC, and C# 8 nullable reference type support.
🌎 Last week in the .NET world
🔥 The Top 3
- David Ramel talks about how AWS has open-sourced the tool for porting .NET framework apps to .NET Core.
- Khalid Abuhakmeh builds a Blazor farm animal soundboard.
- Microsoft Edge announced new preview builds for Linux.
📢 Announcements
- OData now supports .NET 5.
- My Blazor CSS isolation Microsoft doc has been published.
- Git 2.29 is out.
- Tara Overfield provides an October 2020 .NET Framework update.
- Jon Skeet tours the .NET Functions Framework, a framework he built using Google Cloud Functions in C#.
📅 Community and events
- The .NET Foundation joins the Open Source Initiative’s Affiliate Program.
- GitHub announced the npm public roadmap and a new feedback process.
- We had three .NET community standups this week: .NET tooling discusses
dotnet
templates, Machine Learning talks ML.NET in VS Code, and ASP.NET talks about distributed tracing. - The .NET Docs Show talks about Reactive Extensions for UI frameworks with Rodney Littles II.
😎 ASP.NET Core / Blazor
- Dave Brock (ahem) improves rendering performance with Blazor component virtualization.
- Safia Abdalla talks about
ComponentBase
in Blazor. - Peter Vogel asks: is Blazor safe for the enterprise?
- Marinko Spasojevic works with attribute-based access control with Blazor WebAssembly and IdentityServer4, and also integrates Blazor WebAssembly role-based security with IdentityServer4.
- Brian Lagunas uses NPM packages in Blazor.
- Tim Heuer filters a Bootstrap table in C# and Blazor.
- Niels Swimberghe works on real-time apps with Blazor Server and Firestore, and also configures ServicePointManager.SecurityProtocol through AppSettings.
- Damian Hickey nests applications in ASP.NET Core 3.1.
- Khalid Abuhakmeh adds headers to a response in ASP.NET 5.
⛅ The cloud
- Over at Code Maze, they deploy an ASP.NET Core Web API to Azure API apps.
- David Grace continues creating and configuring a SQL Server database and ASP.NET Core Web API in Azure.
- Damien Bowden uses encrypted access tokens in Azure with Microsoft.Identity.Web and Azure app registrations, and also implements a full-text search using Azure Cognitive Search in ASP.NET Core.
- Szymon Kulec offers tips for improving Azure Functions performance.
- Daniel Krzyczkowski monitors solutions with Azure Application Insights, and also manages release flow using Azure DevOps pipelines.
- Hulk Hogan Joe Guadagno authenticates an API secured with Azure AD, Microsoft Identity, and React Native.
📔 C#
- Mads Torgersen talks about the direction of C#.
- Matthew Jones talks about inheritance and polymorphism in C#, and also works with structs and enums in C#.
- David Hayden talks about C# 9 records, and also discusses C# 9 init-only properties.
- Claudio Bernasconi installs and uses C# 9 in Visual Studio 2019.
- Carmel Eve talks about the adapter pattern in C#.
- Ian Griffiths warns against defeating Roslyn warnings with empty strings.
- Anthony Giretti discusses static anonymous functions in C# 9, and also runs through local function attributes in C# 9.
- Matthew MacDonald runs through C# throughout its 20-year history.
- Jeremy Smith clears up some things about C# abstract classes and interfaces.
📗 F#
- Alican Demirtas discusses JSON serialization in F#.
- CompositionalIT released a dojo to help you write SAFE applications.
- Patrick Tone walks through using
bind
in F#.
🔧 Tools
- Scott Hanselman talks about how you shouldn’t break URLs.
- Joab Jackson writes how the Dapr runtime is almost production-ready.
- Jason Gaylord queries Snowflake using .NET.
- Derek Comartin discusses defining service boundaries with loosely coupled systems.
- Andrew Lock runs database migrations using jobs and init containers.
- Tyler Hakes compares GitHub Actions and Azure DevOps.
📱 Xamarin
- Leomaris Reyes adds shortcuts with Xamarin Essentials.
- Delpin Susai Raj works on a network speed monitor.
- Glenn Versweyveld works on custom visual state triggers and control templates.
🎤 Podcasts
- The Xamarin Podcast talks about seeing AI.
- The .NET Rocks podcast talks about the .NET Foundation with Layla Porter.
- The Azure Podcast discusses through Azure Spring Cloud.
🎥 Videos
- The ON.NET Show talks about event-driven apps on Kubernetes with KEDA.
- The Xamarin Show talks about Xamarin.Forms 5.
- Michael Gilliland uses SAFE in F# to create a billiards app.
- Almir Mesic talks about writing F# and Azure Functions apps for production.