Migrace z ASP.NET Core 3.1 na 6.0

Tento článek vysvětluje, jak aktualizovat existující projekt ASP.NET Core 3.1 na ASP.NET Core 6.0. Pokud chcete upgradovat z ASP.NET Core 5.0 na 6.0, přečtěte si téma Migrace z ASP.NET Core 5.0 na 6.0.

Požadavky

Aktualizace verze sady .NET SDK v global.json

Pokud se spoléháte na global.json soubor určený pro konkrétní verzi sady .NET SDK, aktualizujte version vlastnost na nainstalovanou verzi sady .NET 6.0 SDK. Příklad:

{
  "sdk": {
-    "version": "3.1.200"
+    "version": "6.0.100"
  }
}

Aktualizace cílové architektury

Aktualizujte moniker cílového rozhraní (TFM) souboru projektu nanet6.0:

<Project Sdk="Microsoft.NET.Sdk.Web">

  <PropertyGroup>
-    <TargetFramework>netcoreapp3.1</TargetFramework>
+    <TargetFramework>net6.0</TargetFramework>
  </PropertyGroup>

</Project>

Aktualizace odkazů na balíčky

V souboru projektu aktualizujte každý Microsoft.AspNetCore.*Microsoft.EntityFrameworkCore.*, , Microsoft.Extensions.*a System.Net.Http.Json balíček odkaz na Version atribut 6.0.0 nebo novější. Příklad:

<ItemGroup>
-    <PackageReference Include="Microsoft.AspNetCore.JsonPatch" Version="3.1.6" />
-    <PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="3.1.6" />
-    <PackageReference Include="Microsoft.Extensions.Caching.Abstractions" Version="3.1.6" />
-    <PackageReference Include="System.Net.Http.Json" Version="3.2.1" />
+    <PackageReference Include="Microsoft.AspNetCore.JsonPatch" Version="6.0.0" />
+    <PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="6.0.0" />
+    <PackageReference Include="Microsoft.Extensions.Caching.Abstractions" Version="6.0.0" />
+    <PackageReference Include="System.Net.Http.Json" Version="6.0.0" />
</ItemGroup>

Odstranění bin a obj složky

Možná budete muset odstranit bin složky a obj složky. Spuštěním vymažte dotnet nuget locals --clear all mezipaměť balíčků NuGet.

Minimální model hostování

Šablony ASP.NET Core generují kód pomocí nového minimálního modelu hostování. Minimální model hostování se sjednocuje Startup.cs do Program.cs jednoho Program.cs souboru. ConfigureServices a Configure už se nepoužívají. Aplikace migrované z ASP.NET Core 3.1 na verzi 6.0 nepotřebují používat minimální model hostování a Startup obecné hostitele používané šablonami ASP.NET Core 3.1 je plně podporovaná.

Pokud chcete použít Startup s novým minimálním modelem hostování, přečtěte si téma Použití spuštění s novým minimálním modelem hostování.

Pokud chcete migrovat na nový minimální model hostování pomocí následujícího vzoru používaného šablonami ASP.NET Core 6.0, podívejte se na ukázky kódu migrované na nový minimální model hostování v ASP.NET Core 6.0 a migraci z ASP.NET Core 5.0 na 6.0.

Aktualizace Razor knihoven tříd (RCLS)

Migrujte Razor knihovny tříd (RCLS), abyste mohli využívat nová rozhraní API nebo funkce, které jsou zavedeny jako součást ASP.NET Core 6.0.

Aktualizace seznamu RCL, který cílí na komponenty:

  1. V souboru projektu aktualizujte následující vlastnosti:

    <Project Sdk="Microsoft.NET.Sdk.Razor">
      <PropertyGroup>
    -     <TargetFramework>netstandard2.0</TargetFramework>
    -     <RazorLangVersion>3.0</RazorLangVersion>
    +     <TargetFramework>net6.0</TargetFramework>
      </PropertyGroup>
    
  2. Aktualizujte další balíčky na nejnovější verze. Nejnovější verze najdete v NuGet.org.

Pokud chcete aktualizovat seznam RCL určený pro MVC, aktualizujte v souboru projektu následující vlastnosti:

<Project Sdk="Microsoft.NET.Sdk.Razor">

  <PropertyGroup>
-    <TargetFramework>netcoreapp3.1</TargetFramework>
+    <TargetFramework>net6.0</TargetFramework>
    <AddRazorSupportForMvc>true</AddRazorSupportForMvc>
  </PropertyGroup>

Blazor

Pro přijetí všech funkcí 5.0 a funkcí 6.0 pro Blazor aplikace doporučujeme následující postup:

  • Vytvořte nový projekt 6.0 Blazor z jedné ze Blazor šablon projektu. Další informace naleznete v tématu Nástroje pro ASP.NET Core Blazor.
  • Přesuňte komponenty a kód aplikace do aplikace 6.0 a upravte nové funkce verze 5.0 a 6.0.

Aktualizace imagí Dockeru

U aplikací používajících Docker aktualizujte příkazy a skripty DockerfileFROM. Použijte základní image, která zahrnuje modul runtime ASP.NET Core 6.0. Představte si následující docker pull rozdíl mezi ASP.NET Core 3.1 a 6.0:

- docker pull mcr.microsoft.com/dotnet/core/aspnet:3.1
+ docker pull mcr.microsoft.com/dotnet/aspnet:6.0

V rámci přechodu na .NET jako název produktu se image Dockeru přesunuly z mcr.microsoft.com/dotnet/core úložišť do mcr.microsoft.com/dotnet. Další informace najdete v tématu .NET 5.0 – Změna názvu úložiště Dockeru (dotnet/dotnet-docker #1939).

Změny vazby modelu ve ASP.NET Core MVC a Razor Stránkách

DateTime hodnoty jsou vázané jako časy UTC.

V ASP.NET Core 3.1 a starších DateTime byly hodnoty vázané na model jako místní čas, kdy server určil časové pásmo. DateTime hodnoty vázané ze vstupního formátování (JSON) a DateTimeOffset hodnoty byly vázány jako časové pásmo UTC.

V ASP.NET Core 5.0 a novější vazby modelu konzistentně DateTime sváže hodnoty s časovým pásmem UTC.

Chcete-li zachovat předchozí chování, odeberte v Startup.ConfigureServices:DateTimeModelBinderProvider

services.AddControllersWithViews(options =>
    options.ModelBinderProviders.RemoveType<DateTimeModelBinderProvider>());

ComplexObjectModelBinderProvider \ ComplexObjectModelBinder nahradit ComplexTypeModelBinderProvider \ ComplexTypeModelBinder

Pokud chcete přidat podporu pro typy záznamů C# 9 vazby modelu, je následujícíComplexTypeModelBinderProvider:

  • Poznámka je zastaralá.
  • Ve výchozím nastavení už není zaregistrovaný.

Aplikace, které spoléhají na přítomnost ComplexTypeModelBinderProvider v ModelBinderProviders kolekci, musí odkazovat na nového poskytovatele pořadače:

- var complexModelBinderProvider = options.ModelBinderProviders.OfType<ComplexTypeModelBinderProvider>();
+ var complexModelBinderProvider = options.ModelBinderProviders.OfType<ComplexObjectModelBinderProvider>();

UseDatabaseErrorPage zastaralý

Šablony ASP.NET Core 3.1, které obsahují možnost pro jednotlivé uživatelské účty, generují volání UseDatabaseErrorPage. UseDatabaseErrorPage je nyní zastaralý a měl by být nahrazen kombinací AddDatabaseDeveloperPageExceptionFilter a UseMigrationsEndPoint, jak je znázorněno v následujícím kódu:

public void ConfigureServices(IServiceCollection services)
{
    services.AddDbContext<ApplicationDbContext>(options =>
        options.UseSqlServer(
            Configuration.GetConnectionString("DefaultConnection")));
+   services.AddDatabaseDeveloperPageExceptionFilter();
    services.AddDefaultIdentity<IdentityUser>(options => options.SignIn.RequireConfirmedAccount = true)
        .AddEntityFrameworkStores<ApplicationDbContext>();
    services.AddRazorPages();
}

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
    if (env.IsDevelopment())
    {
        app.UseDeveloperExceptionPage();
+       app.UseMigrationsEndPoint();
-       app.UseDatabaseErrorPage();
    }
    else
    {
        app.UseExceptionHandler("/Error");
        app.UseHsts();
    }

Další informace naleznete v tématu Obsoleting DatabaseErrorPage middleware (dotnet/aspnetcore #24987).

modul ASP.NET Core (ANCM)

Pokud ASP.NET Core Module (ANCM) nebyla vybraná komponenta při instalaci sady Visual Studio nebo pokud byla v systému nainstalována předchozí verze ANCM, stáhněte si nejnovější instalační program balíčku hostingu .NET Core (přímý stažení) a spusťte instalační program. Další informace naleznete v tématu Hosting Bundle.

Změna názvu aplikace

V .NET 6 normalizuje kořenovou cestu k obsahu tak, WebApplicationBuilder aby končila na .DirectorySeparatorChar Většina aplikací migrovaných z HostBuilder nebo WebHostBuilder nebude mít stejný název aplikace, protože nejsou normalizované. Další informace najdete v tématu SetApplicationName

Kontrola zásadních změn

Projděte si následující zdroje informací: