AspNetCore.Docs/aspnetcore/migration/22-to-30.md

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.

[!INCLUDE]

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 missing Microsoft.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 for Microsoft.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 #3755

    For example, Microsoft.EntityFrameworkCore and System.Data.SqlClient are no longer part of Microsoft.AspNetCore.App. The list of assemblies shipping in Microsoft.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:

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:

[!code-csharp]

The following code shows the ASP.NET Core 2.2 template-generated Program class:

[!code-csharp]

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.