Migrowanie z ASP.NET Core 3.1 do wersji 6.0

W tym artykule wyjaśniono, jak zaktualizować istniejący projekt ASP.NET Core 3.1 w celu ASP.NET Core 6.0. Aby uaktualnić z ASP.NET Core 5.0 do 6.0, zobacz Migrowanie z ASP.NET Core 5.0 do 6.0.

Wymagania wstępne

Aktualizowanie wersji zestawu .NET SDK w programie global.json

Jeśli plik jest zależny od global.json określonej wersji zestawu .NET SDK, zaktualizuj version właściwość do zainstalowanej wersji zestawu SDK platformy .NET 6.0. Na przykład:

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

Aktualizowanie platformy docelowej

Zaktualizuj plik projektu Target Framework Moniker (TFM) na net6.0:

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

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

</Project>

Aktualizowanie odwołań do pakietów

W pliku projektu zaktualizuj atrybut odwołania do pakietu Microsoft.AspNetCore.*, Microsoft.EntityFrameworkCore.*, Microsoft.Extensions.*i System.Net.Http.JsonVersion do wersji 6.0.0 lub nowszej. Na przykład:

<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>

Usuwanie bin i obj foldery

Może być konieczne usunięcie bin folderów i obj . Uruchom polecenie dotnet nuget locals --clear all , aby wyczyścić pamięć podręczną pakietu NuGet.

Minimalny model hostingu

Szablony ASP.NET Core generują kod przy użyciu nowego minimalnego modelu hostingu. Minimalny model hostingu łączy Startup.cs się i Program.cs w jeden Program.cs plik. ConfigureServices i Configure nie są już używane. Aplikacje migrowane z platformy ASP.NET Core 3.1 do 6.0 nie muszą używać minimalnego modelu hostingu, a Startuphost ogólny używany przez szablony platformy ASP.NET Core 3.1 jest w pełni obsługiwany.

Aby użyć Startup z nowym minimalnym modelem hostingu, zobacz Use Startup with the new minimal hosting model (Używanie uruchamiania z nowym minimalnym modelem hostingu).

Aby przeprowadzić migrację do nowego minimalnego modelu hostingu przy użyciu następującego wzorca używanego przez szablony platformy ASP.NET Core 6.0, zobacz Przykłady kodu migrowane do nowego minimalnego modelu hostingu w programie ASP.NET Core 6.0 i Migrowanie z ASP.NET Core 5.0 do 6.0

Aktualizowanie Razor bibliotek klas (RCLS)

Migrowanie Razor bibliotek klas (RCLs) w celu korzystania z nowych interfejsów API lub funkcji, które są wprowadzane w ramach ASP.NET Core 6.0.

Aby zaktualizować listę RCL, która jest przeznaczona dla składników:

  1. Zaktualizuj następujące właściwości w pliku projektu:

    <Project Sdk="Microsoft.NET.Sdk.Razor">
      <PropertyGroup>
    -     <TargetFramework>netstandard2.0</TargetFramework>
    -     <RazorLangVersion>3.0</RazorLangVersion>
    +     <TargetFramework>net6.0</TargetFramework>
      </PropertyGroup>
    
  2. Zaktualizuj inne pakiety do najnowszych wersji. Najnowsze wersje można znaleźć w NuGet.org.

Aby zaktualizować listę RCL docelową MVC, zaktualizuj następujące właściwości w pliku projektu:

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

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

Blazor

Aby wdrożyć wszystkie funkcje w wersji 5.0 i 6.0 dla Blazor aplikacji, zalecamy następujący proces:

  • Utwórz nowy projekt w wersji 6.0 Blazor na podstawie jednego z Blazor szablonów projektów. Aby uzyskać więcej informacji, zobacz Tooling for ASP.NET Core Blazor.
  • Przenieś składniki i kod aplikacji do aplikacji w wersji 6.0, wprowadzając modyfikacje w celu wdrożenia nowych funkcji 5.0 i 6.0.

Aktualizowanie obrazów platformy Docker

W przypadku aplikacji korzystających z platformy Docker zaktualizuj instrukcje i skrypty dockerfileFROM . Użyj obrazu podstawowego, który zawiera środowisko uruchomieniowe ASP.NET Core 6.0. Rozważ następującą docker pull różnicę poleceń między ASP.NET Core 3.1 i 6.0:

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

W ramach przenoszenia do platformy ".NET" jako nazwy produktu obrazy platformy Docker zostały przeniesione z mcr.microsoft.com/dotnet/core repozytoriów do .mcr.microsoft.com/dotnet Aby uzyskać więcej informacji, zobacz .NET 5.0 — Zmiana nazwy repozytorium platformy Docker (dotnet/dotnet-docker #1939).

Zmiany powiązań modelu w usługach ASP.NET Core MVC i Razor Pages

DateTime wartości są powiązane z modelem w czasie UTC

W ASP.NET Core 3.1 i starszych DateTime wartości były powiązane z modelem jako czas lokalny, gdzie strefa czasowa została określona przez serwer. DateTime wartości powiązane z formatowaniem wejściowym (JSON) i DateTimeOffset wartości były powiązane jako strefy czasowe UTC.

W ASP.NET Core 5.0 lub nowszym powiązanie modelu stale wiąże DateTime wartości ze strefą czasową UTC.

Aby zachować poprzednie zachowanie, usuń element w pliku DateTimeModelBinderProvider :Startup.ConfigureServices

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

ComplexObjectModelBinderProvider \ ComplexObjectModelBinder Zastąpić ComplexTypeModelBinderProvider \ ComplexTypeModelBinder

Aby dodać obsługę powiązań modelu dla typów rekordów języka C# 9, to ComplexTypeModelBinderProvider :

  • Oznaczone jako przestarzałe.
  • Nie zarejestrowano już domyślnie.

Aplikacje, które opierają się na obecności ComplexTypeModelBinderProvider elementu w ModelBinderProviders kolekcji, muszą odwoływać się do nowego dostawcy binder:

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

UseDatabaseErrorPage Przestarzałe

Szablony ASP.NET Core 3.1 zawierające opcję dla poszczególnych kont użytkowników generują wywołanie metody UseDatabaseErrorPage. UseDatabaseErrorPage element jest teraz przestarzały i powinien zostać zastąpiony AddDatabaseDeveloperPageExceptionFilter kombinacją elementów i UseMigrationsEndPoint, jak pokazano w poniższym kodzie:

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();
    }

Aby uzyskać więcej informacji, zobacz Oprogramowanie pośredniczące Obsoleting DatabaseErrorPage (dotnet/aspnetcore #24987).

ASP.NET Core Module (ANCM)

Jeśli moduł ASP.NET Core Module (ANCM) nie był wybranym składnikiem, gdy program Visual Studio został zainstalowany lub czy wcześniejsza wersja narzędzia ANCM została zainstalowana w systemie, pobierz najnowszy Instalator pakietu hostingowego platformy .NET Core (pobieranie bezpośrednie) i uruchom instalatora. Aby uzyskać więcej informacji, zobacz Hosting Bundle (Pakiet hostingu).

Zmiana nazwy aplikacji

Na platformie .NET 6 WebApplicationBuilder normalizuje ścieżkę katalogu głównego zawartości, aby zakończyć ciąg .DirectorySeparatorChar Większość aplikacji migrowanych z HostBuilder lub WebHostBuilder nie ma takiej samej nazwy aplikacji, ponieważ nie są znormalizowane. Aby uzyskać więcej informacji, zobacz SetApplicationName

Przeglądanie zmian powodujących niezgodność

Zobacz następujące zasoby: