Last year Microsoft announced that with the release of .NET 5, a number of .NET products would be consolidated into a single .NET release. This includes .NET Core, .NET Framework, and .NET Standard.
.NET 5 is expected to release in November, and as that date nears, the company has now revealed more information about what the changes mean for .NET Standard.
As of .NET 5, the company won’t release a new version of .NET Standard, but future versions will continue supporting .NET Standard 2.1 and earlier. Microsoft encourages developers to think of .NET 5 and future versions as the foundation for sharing code from now on.
RELATED CONTENT: .NET 5 merges .NET Core and .NET Framework into one solution
“My expectation is that widely used libraries will end up multi-targeting for both .NET Standard 2.0 and .NET 5: supporting .NET Standard 2.0 gives you the most reach while supporting .NET 5 ensures you can leverage the latest platform features for customers that are already on .NET 5,” Immo Landwerth, program manager for .NET at Microsoft, wrote in a post.
According to Landwerth, while .NET Standard made it easier to create libraries that work on .NET platform, it had three main issues.
First, .NET Standard versioned slowly, resulting in developers not being able to easily use the latest features.
Second, it requires a decoder ring in order to map versions to .NET implementations. This is because the API set and implementations are shipped separately. “We can’t solve this problem without truly merging some rectangles in our layer diagram, which is what .NET 5 does: it provides a unified implementation where all parties build on the same foundation and thus get the same API shape and version number,” Landwerth wrote.
Third, .NET Standard exposes platform-specific features. This means that developers can’t statically validate if their code is actually portable or not. “Many of you have complained that these kind of APIs feel like “landmines” – the code compiles without errors and thus appears to being portable to any platform, but when running on a platform that doesn’t have an implementation for the given API, you get runtime errors,” Landwerth wrote. “Starting with .NET 5, we’re shipping analyzers and code fixers with the SDK that are on by default. This includes the platform compatibility analyzer that detects unintentional use of APIs that aren’t supported on the platforms you intend to run on.”
Moving forward, .NET will serve as a single code base to support desktop apps, mobile apps, cloud services, websites, and environments.
.NET 5 is expected to ship in November 2020, and .NET 6 is planned for November 2021 and will be a LTS version.
“Since there is no difference between the standard and its implementation, you’ll be able to take advantage of new features much quicker than with .NET Standard. And due to the naming convention, you’ll be able to easily tell who can consume a given library — without having to consult the .NET Standard version table. While .NET Standard 2.1 will be the last version of .NET Standard, .NET 5 and all future versions will continue to support .NET Standard 2.1 and earlier. You should think of net5.0 (and future versions) as the foundation for sharing code moving forward,” Landwerth added.