A first look at changes coming in ASP.NET Core 3.0
While we continue to work on finalizing the next minor version of ASP.NET Core, we’re also working on major updates to our next release that will include some changes in how projects are composed with frameworks, tighter .NET Core integration, and 3rd party open source integration, all with the goal of making it easier and faster for you to develop. For broader context around .NET Core 3.0, we encourage you to check out our previous announcements around the addition of WinForms and WPF support to .NET Core 3.0 on Windows. We’ll publish more details about new features coming in ASP.NET Core 3.0 in the near future.
Packages vs. Frameworks
For historical context, the way projects reference and run on ASP.NET Core has changed through the versions and years. In 1.0, ASP.NET Core itself was “just packages”, and appeared in projects like any other NuGet package reference. This had benefits and drawbacks, and over time we’ve evolved this model to try and balance the advantages of modular references with those of larger, prerequisite frameworks. In 2.1, ASP.NET Core eventually evolved to be available as a .NET Core “shared framework” (like the base of .NET Core itself, Microsoft.NETCore.App, has been since 1.0). This blog post by ASP.NET Core team member Nate McMaster does a good job of explaining how the shared framework works while also highlighting some of the issues with the current approach. Updates we’re introducing in 3.0 are designed to reduce these issues for all our users.
As part of this change, some notable sub-components will be removed from the ASP.NET Core shared framework in 3.0:
- Json.NET (Newtonsoft.Json)
- Entity Framework Core (Microsoft.EntityFrameworkCore.*)
See this announcement for more details regarding the addition of JSON APIs in .NET Core. For places in ASP.NET Core that rely on Json.NET features today (e.g. the JSON formatter in MVC), we’ll continue to ship packages that provide that integration moving forward, however the default experiences will change to use the upcoming in-box JSON APIs.
Entity Framework Core will ship as “pure” NuGet packages in 3.0. This makes its shipping model the same as all other data access libraries on .NET, and allows it the simplest path to continue innovation while providing support for all the various .NET platforms customers enjoy it on today. Note, Entity Framework Core moving out of the shared framework has no impact on its status as a Microsoft developed, supported, and serviceable library, and it will continue to be covered by the .NET Core support policy.
Fully leveraging .NET Core
As announced on the .NET Blog earlier this month, .NET Framework will get fewer of the newer platform and language features that come to .NET Core moving forward, due to the in-place update nature of .NET Framework and the desire to limit changes there that might break existing applications. To ensure ASP.NET Core can fully leverage the improvements coming to .NET Core moving forward, ASP.NET Core will only run on .NET Core starting from 3.0. Moving forward, you can simply think of ASP.NET Core as being part of .NET Core.
Customers utilizing ASP.NET Core on .NET Framework today can continue to do so in a fully supported fashion using the 2.1 LTS release. Support and servicing for 2.1 will continue until at least August 21, 2021 (3 years after its declaration as an LTS release) in accordance with the .NET Core support policy.
For more information about porting from .NET Framework to .NET Core, see this documentation.
UPDATE: In order to give customers a reasonable stepping stone on their path to migrating applications to ASP.NET Core on .NET Core, we are going to extend support and servicing for ASP.NET Core 2.1.x on .NET Framework to match the current support policy for the other package-based ASP.NET frameworks, e.g. MVC 5.x, Web API 2.x, SignalR 2.x. This effectively means the ASP.NET Core 2.1.x related packages (final detailed list TBD) will be supported indefinitely, beyond the 3 year LTS period for the .NET Core 2.1 train overall.
Delivering more value with focused 3rd party open-source integration
At the same time we’re drawing a clearer distinction between what constitutes the “platform” in 3.0, and in doing so removing 3rd party components from that layer, we recognize that many higher-level scenarios are best assisted by established, capable, and well supported open-source components, and that we can provide support and assistance to the community and our customers by helping to ensure these components integrate as well as possible into ASP.NET Core applications.
This support will take different forms, including first-class integration APIs & packages built by our team, contributions made to existing libraries by our engineers, project templates in the default experiences that utilize these libraries, documentation that lives on the official ASP.NET Core docs site, and processes for dealing with critical issues and bug fixes, including security.
We’ve already begun this in the 2.2 wave, with new integration being developed for the popular IdentityServer library, which will help us deliver a simple and functional story for API Authorization in ASP.NET Core applications, while allowing customers to leverage the full power of IdentityServer when they need to.
We’re also working on streamlining the experience for building HTTP APIs, with new API Conventions and analyzers that make working with popular Open API libraries like Swashbuckle and NSwag easier, and a new API client generation system that allows for simple integration with code generators like AutoRest and NSwag.
For folks excited by our new Health Checks feature, the owners of the BeatPulse library are working to port their extensive library of checks over.
We intend to bring these experiences together in a new project template to be made available in the period after 2.2 ships.
Stay tuned for more updates as we continue working on ASP.NET Core in .NET Core 3.0, including a summary of the new features we’re working to enable as part of this release. We also regularly post details of changes and other information on our announcements repo, which we encourage you to subscribe to.