Facilitating the Spread of Knowledge and Innovation in Professional Software Development

Write for InfoQ


Choose your language

InfoQ Homepage News Microsoft Releases .NET Core 3.0

Microsoft Releases .NET Core 3.0

This item in japanese

Earlier this week, Microsoft announced the release of .NET Core 3.0 simultaneously at .NET Conf 2019 and on their development blog. The new release includes support for Windows Desktop apps using Windows Forms and Windows Presentation Framework (WPF), new JSON APIs, support for Linux ARM64, and overall performance improvements. F# 4.7 and C# 8.0 are also featured as part of this release.

In this new version, .NET Core completely supports the development of Windows Desktop applications using Windows Forms, WPF, and UWP XAML. This is one of the most important features of this release; Microsoft presented it as the highlight of .NET Core 3 earlier this year, at Microsoft Build Live. Windows Forms and WPF were open-sourced last year, along with the Windows UI XAML Library (WinUI). Since then, the development efforts were focused on ensuring that .NET Framework compatibility was maintained - which included ease of porting from .NET Framework to .NET Core.

While porting desktop applications to .NET Core is an important feature, the new features also include new templates and tools. The XAML designer in Visual Studio was updated, and it now includes a feature called XAML Hot Reload. This new feature allows a developer to make changes to the XAML code while the application is still running. The Windows Forms designer was also updated, but it is still in preview (available as a separate download for Visual Studio). It is important to notice that Windows Forms and WPF applications only work on Windows.

Other important features related to Windows Desktop development refer to using and deploying different .NET Core versions. Windows Desktop apps can now be distributed as self-contained application; they can use their own .NET Core version, independently of the environment in which they are deployed. There is also an option to distribute them as single-file executables, which is important considering that in past releases, desktop applications needed to be launched via the dotnet command. An interesting functionality related to single-file executables is the dependency trimming; it removes all assemblies not being used by the application, making the generated file smaller. This functionality, however, is still considered "experimental"; it was showcased at .NET Conf 2019, and generated a single executable while trimming the assemblies from the sample application took a few minutes.

.NET Core 3.0 also includes new JSON APIs targeted at reader/writer scenarios, random access with a document object model (DOM), and a serializer. The new APIs are in line with Microsoft's plans of removing the dependency from ASP.NET Core to the Json.NET framework. These plans also include creating high-performance JSON APIs, which would ultimately increase the performance of Kestrel (the default web server included in ASP.NET Core templates). According to Immo Landwerth, program manager on the .NET team at Microsoft:

The requirements for the .NET stack have changed a bit since the arrival of .NET Core. Historically, .NET has valued usability and convenience. With .NET Core, we've added a focus on performance, and we've made significant investments to serve high-performance needs. [...] We believe in order to support JSON parsing, we'll need to expose a new set of JSON APIs that are specifically geared for high-performance scenarios.

A new version of SqlClient (originally part of the System.Data.dll assembly in .NET Framework) was also introduced in the new release. Besides being available in preview as a NuGet package, the new version also features support for Always Encrypted, Data Classification, and UTF-8.

Support for Linux ARM64 comes as part of the IoT development effort. According to Richard Lander, program manager on the .NET Team at Microsoft:

We added support for Linux ARM64 in this release, after having added support for ARM32 for Linux and Windows in the .NET Core 2.1 and 2.2, respectively. While some IoT workloads take advantage of our existing x64 capabilities, many users had been asking for ARM support. That is now in place, and we are working with customers who are planning large deployments.

Finally, the details on all performance improvements can be found here. These improvements include making the Garbage Collector (GC) use less memory by default (by making the heap sizes smaller) and reducing the .NET Core SDK to 25%-30% of its original size (on-disk, depending on the operating system). Other features include support for Docker resource limits and support for TLS 1.3 and OpenSSL 1.1.1 on Linux. C# 8.0 and F# 4.7 are also included as part of the .NET Core 3.0 release due to their significance. The F# Core Library now targets .NET Standard 2.0, and C# 8.0 adds async streams and nullable reference types.

An interesting characteristic of this release is related to the development process. Microsoft announces .NET Core 3.0 as "battle-tested", since it is being hosted for months now at and All new features were consistently made available for public testing from December 2018 to late July of this year, when .NET Core entered the freezing period. This was also noted by the community - as user Manigandham on HackerNews points out:

.Net 3.0 has gone through about a dozen preview releases and the last four have a go-live production license. It's much better tested than the old .NET Framework with its monolithic releases.

According to the official roadmap, .NET Core 3.1 Long Term Support (LTS) will be released later this year, in November. .NET Core 3.0 is supported on Windows 7+, Windows Server 2012 R2 SP1+, macOS 10.13+, and different Linux distributions. The latest version of Visual Studio 2019 (16.3 on Windows, 8.3 on macOS) is required for using .NET Core 3.0. Also, Visual Studio App Center was already updated to support applications developed in the new version of .NET Core.

Rate this Article