Microsoft has released preview 7 of its .NET 6 developer platform and declared new features "done" ahead of an expected arrival for this long-term support version in November.
The current version, .NET 5.0, is only supported until May 2022, whereas .NET 6.0 will have a lifetime of three years. Even three years is not very long; Microsoft described this as a "modern lifecycle."
Even so, .NET 6.0 is a significant release and the first LTS (long-term support) iteration of Microsoft's unified .NET platform, which is intended to replace both .NET Framework (now legacy) and .NET Core.
The latest preview came with a raft of Microsoft developer news, including Visual Studio 2022 Preview 3, .NET MAUI (Multi-platform App UI) preview 7 – which replaces Xamarin for cross-platform mobile projects – and updates to ASP.NET Core.
Just to add to the usual .NET confusion, principal program manager Richard Lander said .NET 6.0 will include preview features that are not supported for production. For .NET 6, "we've built the capability to mark APIs as 'in preview'," he said.
These are opt in, using an EnablePreviewFeatures project property and a reference to System.Runtime.Experimental. The features are likely to get breaking changes, so only for testing and experimentation.
Features in preview include static abstract interface members (including operators), which Lander said was "perhaps the most important new type system capability since Span<T>." The feature is described in detail here, under the heading Generic Math, where software engineer Tanner Gooding explained: "You can now declare interface members that are simultaneously static and abstract." This enables what he said was a long-requested feature in .NET, "the ability to use operators on generic types."
"Welcomed feature," said one developer, though they added: "Slowly I don't know any longer if I am on C# or C++".
- Stack Overflow survey: Microsoft IDEs dominate, GCP and Azure battle behind AWS
- The framework that will not die: Microsoft gives Web Forms designer fresh lick of paint in Visual Studio 2022
- Microsoft previews Hot Reload for .NET developers, sets date for .NET 6
- Microsoft: Try to break our first preview of 64-bit Visual Studio – go on, we dare you
As if to reinforce this comment, Lander said that .NET 6.0 is adding new native memory allocation APIs, "exposed via System.Runtime.InteropServices.NativeMemory," which are equivalent to the malloc, free, realloc and calloc C APIs.
Originally C# was designed to be a safe language, not vulnerable to bugs like buffer overflows or use of unallocated memory, though it was always possible to bypass this by using native interop or code marked as unsafe. Lander said that these new APIs are "intended for low-level code and algorithms. Application developers would rarely if ever use these."
Versions of C#, the primary language of .NET, align with new releases of the runtime. C# 9.0 arrived with .NET 5.0, while C# 10.0 will be in .NET 6.0. Preview features like static abstract interface members are presumably under consideration for C# 11.0, though currently listed simply as for "C# 10 Preview".
A small detail in .NET 6.0 that will be welcomed by those targeting Linux is that the ZipFile class now captures and respects Unix file permissions.
One consequence is that Blazor can upload files larger than 2GB. Blazor's ability to modify HTML elements has also been enhanced, with code now able to set the page title and add meta elements to the HTML Head element.
.NET MAUI is getting new layouts – Grid, FlexLayout, and StackLayout – to replace the old Xamarin layouts. Another change is font scaling by default across all platforms.
Visual Studio 2019 is also getting an update, to 16.11, which senior program manager Mads Kristensen said is the last baseline update. Therefore, "we encourage Enterprise and Professional customers to standardize on Visual Studio 2019 16.11," he said. New features include hot reload (see the output from code changes on the fly) for .NET applications, improved Git tooling, and update of the Clang/LLVM toolchain to version 12.®