4.7 KiB
title | author | description | ms.author | ms.custom | ms.date | uid |
---|---|---|---|---|---|---|
Migrate from ASP.NET Core 2.2 to 3.0 Preview | tdykstra | Learn how to migrate an ASP.NET Core 2.2 project to ASP.NET Core 3.0. | tdykstra | mvc | 01/04/2019 | migration/22-to-30 |
Migrate from ASP.NET Core 2.2 to 3.0 Preview 2
By Scott Addie and Rick Anderson
This article explains how to update an existing ASP.NET Core 2.2 project to ASP.NET Core 3.0 preview 2.
Update the project file
-
Set the Target Framework Moniker (TFM) to
netcoreapp3.0
:<TargetFramework>netcoreapp3.0</TargetFramework>
-
Remove any
<PackageReference>
to the Microsoft.AspNetCore.All or Microsoft.AspNetCore.App metapackage.There's a known issue in Preview 1: projects that don't start with
<Project Sdk="Microsoft.NET.Sdk.Web">
get compiler or runtime errors due to missingMicrosoft.AspNetCore.*
assemblies. This is most often the case for test projects and class libraries. The workaround is to add the following to the .csproj file.<ItemGroup> <FrameworkReference Include="Microsoft.AspNetCore.App" /> </ItemGroup>
For more information, see NuGet/Home issue #7342.
-
Update the
Version
on remaining<PackageReference>
elements forMicrosoft.AspNetCore.*
packages to the current preview (for example, 3.0.0-preview-18579-0053).If there is no 3.0 version of a package, the package might have been deprecated in 3.0. Many of these are part of
Microsoft.AspNetCore.App
and should not be referenced individually anymore. For a preliminary list of packages no longer produced in 3.0, see aspnet/AspNetCore #3756. -
Some assemblies were removed from
Microsoft.AspNetCore.App
between 2.x and 3.0. You may need to add<PackageReference>
items if you're using APIs from packages listed in aspnet/AspNetCore #3755For example,
Microsoft.EntityFrameworkCore
andSystem.Data.SqlClient
are no longer part ofMicrosoft.AspNetCore.App
. The list of assemblies shipping inMicrosoft.AspNetCore.App
hasn't been finalized yet and will change before 3.0 RTM. -
Add Json.NET support
Json.NET support
As part of the work to improve the ASP.NET Core shared framework, Json.NET has been removed from the ASP.NET Core shared framework.
To use Json.NET in an ASP.NET Core 3.0 project:
-
Add a package reference to Microsoft.AspNetCore.Mvc.NewtonsoftJson
-
Update
ConfigureServices
to callAddNewtonsoftJson()
.services.AddMvc() .AddNewtonsoftJson();
Newtonsoft settings can be set with AddNewtonsoftJson
:
```csharp
services.AddMvc()
.AddNewtonsoftJson(options =>
options.SerializerSettings.ContractResolver =
new CamelCasePropertyNamesContractResolver());
```
HostBuilder replaces WebHostBuilder
The ASP.NET Core 3.0 templates use Generic Host. Previous versions used Web Host. The following code shows the ASP.NET Core 3.0 template generated Program
class:
The following code shows the ASP.NET Core 2.2 template-generated Program
class:
xref:Microsoft.AspNetCore.Hosting.IWebHostBuilder remains in 3.0 and is the type of the webBuilder
seen in the preceding code sample. xref:Microsoft.AspNetCore.Hosting.WebHostBuilder will be deprecated in a future release and replaced by HostBuilder
.
Moving from WebHostBuilder to HostBuilder
The most significant change from WebHostBuilder
to HostBuilder
is in dependency injection (DI). When using HostBuilder
, you can only inject xref:Microsoft.Extensions.Configuration.IConfiguration, xref:Microsoft.Extensions.Hosting.IHostingEnvironment, and xref:Microsoft.AspNetCore.Hosting.IHostingEnvironment into Startup's constructor. The HostBuilder
DI constraints:
- Enable the DI container to be built only one time.
- Avoids the resulting object lifetime issues like resolving multiple instances of singletons.