Migrieren von ASP.NET Core 3.1 zu 6.0

In diesem Artikel wird erläutert, wie Sie ein vorhandenes ASP.NET Core 3.1-Projekt auf ASP.NET Core 6.0 aktualisieren. Informationen zum Upgrade von ASP.NET Core 5.0 auf 6.0 finden Sie unter Migrieren von ASP.NET Core 5.0 zu 6.0.

Voraussetzungen

Aktualisieren der .NET Core SDK-Version in global.json

Wenn Sie eine global.json-Datei für eine bestimmte .NET SDK-Version verwenden, aktualisieren Sie die version-Eigenschaft auf die installierte .NET 6.0 SDK-Version. Zum Beispiel:

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

Aktualisieren des Zielframeworks

Aktualisieren Sie den Zielframeworkmoniker (Target Framework Moniker, TFM) der Projektdatei auf net6.0:

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

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

</Project>

Aktualisieren von Paketverweisen

Aktualisieren Sie in der Projektdatei das Version-Attribut jedes Paketverweises vom Typ Microsoft.AspNetCore.*, Microsoft.EntityFrameworkCore.*, Microsoft.Extensions.* und System.Net.Http.Json auf 6.0.0 oder höher. Beispiel:

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

Löschen der Ordner bin und obj

Möglicherweise müssen Sie die Ordner bin und obj löschen. Führen Sie dotnet nuget locals --clear all aus, um den NuGet-Paketcache zu löschen.

Minimales Hostingmodell

Die ASP.NET Core Vorlagen generieren Code mithilfe des neuen minimalen Hostingmodells. Das minimale Hostingmodell vereinheitlicht Startup.cs und Program.cs in einer einzelnen Program.cs-Datei. ConfigureServices und Configure werden nicht mehr verwendet. Für Apps, die von ASP.NET Core 3.1 zu 6.0 migriert werden, muss nicht das minimale Hostingmodell verwendet werden. Die Verwendung von Startup und des generischen Hosts, der von den ASP.NET Core 3.1-Vorlagen verwendet wird, wird vollständig unterstützt.

Informationen zur Verwendung von Startup mit dem neuen minimalen Hostingmodell finden Sie unter Verwenden des Startvorgangs mit dem neuen minimalen Hostingmodell.

Informationen zur Migration zum neuen minimalen Hostingmodell mithilfe des folgenden Musters, das von den ASP.NET Core 6.0-Vorlagen verwendet wird, finden Sie unter Codebeispiele, die in ASP.NET Core 6.0 zum neuen minimalen Hostingmodell migriert wurden und Migrieren von ASP.NET Core 5.0 zu 6.0.

Aktualisieren von Razor-Klassenbibliotheken (RCLs)

Migrieren Sie Razor-Klassenbibliotheken (Razor Class Library, RCL), um neue APIs oder Features zu nutzen, die im Rahmen von ASP.NET Core 6.0 eingeführt werden.

So aktualisieren Sie eine RCL, die auf Komponenten abzielt

  1. Aktualisieren Sie die folgenden Eigenschaften in der Projektdatei:

    <Project Sdk="Microsoft.NET.Sdk.Razor">
      <PropertyGroup>
    -     <TargetFramework>netstandard2.0</TargetFramework>
    -     <RazorLangVersion>3.0</RazorLangVersion>
    +     <TargetFramework>net6.0</TargetFramework>
      </PropertyGroup>
    
  2. Aktualisieren Sie andere Pakete auf die aktuellen Versionen. Die aktuellen Versionen finden Sie auf NuGet.org.

Um eine RCL für MVC zu aktualisieren, aktualisieren Sie die folgenden Eigenschaften in der Projektdatei:

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

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

Blazor

Um alle 5.0-Features und 6.0-Features für Blazor-Apps, einzuführen, empfehlen wir den folgenden Prozess:

  • Erstellen Sie ein neues Blazor-Projekt für 6.0 auf der Grundlage einer der Blazor-Projektvorlagen. Weitere Informationen finden Sie unter Tools für ASP.NET Core Blazor.
  • Migrieren Sie die Komponenten und den Code der App zur 6.0-App, und nehmen Sie Änderungen vor, um die neuen 5.0- und 6.0-Features einzuführen.

Aktualisieren von Docker-Images

Aktualisieren Sie für Apps, die Docker verwenden, Ihre DockerfileFROM--Anweisungen und Skripts. Verwenden Sie ein Basisimage, das die ASP.NET Core 6.0-Runtime enthält. Beachten Sie den folgenden Unterschied beim Befehl docker pull zwischen ASP.NET Core 3.1 und 6.0:

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

Im Rahmen des Wechsels zu „.NET“ als Produktname wurden die Docker-Images aus den mcr.microsoft.com/dotnet/core-Repositorys in mcr.microsoft.com/dotnet verschoben. Weitere Informationen finden Sie unter .NET 5.0 - Docker Repo Name Change (dotnet/dotnet-docker #1939) (.NET 5.0 – Namensänderung für Docker-Repository (dotnet/dotnet-docker #1939)).

Änderungen der Modellbindung in ASP.NET Core MVC und Razor Pages

DateTime-Werte sind als UTC-Zeiten modellgebunden.

In ASP.NET Core 3.1 und früher waren DateTime-Werte als Ortszeit modellgebunden, wobei die Zeitzone vom Server bestimmt wurde. Durch die Eingabeformatierung (JSON) gebundene DateTime-Werte und DateTimeOffset-Werte wurden als UTC-Zeitzonen gebunden.

In ASP.NET Core 5.0 und höher werden DateTime-Werte von der Modellbindung konsistent an die UTC-Zeitzone gebunden.

Um das vorherige Verhalten beizubehalten, entfernen Sie DateTimeModelBinderProvider in Startup.ConfigureServices:

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

ComplexObjectModelBinderProvider \ ComplexObjectModelBinder ersetzt ComplexTypeModelBinderProvider \ ComplexTypeModelBinder.

Zum Hinzufügen von Unterstützung für die Modellbindung von C# 9-Datensatztypen ist der ComplexTypeModelBinderProvider:

  • Als veraltet gekennzeichnet.
  • Nicht mehr standardmäßig registriert.

Apps, die vom Vorhandensein von ComplexTypeModelBinderProvider in der ModelBinderProviders-Sammlung abhängig sind, müssen auf den neuen Binderanbieter verweisen:

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

UseDatabaseErrorPage veraltet

Die ASP.NET Core 3.1-Vorlagen, die eine Option für einzelne Benutzerkonten enthalten, generieren einen Aufruf von UseDatabaseErrorPage. UseDatabaseErrorPage ist jetzt veraltet und sollte wie im folgenden Code gezeigt durch eine Kombination von AddDatabaseDeveloperPageExceptionFilter und UseMigrationsEndPoint ersetzt werden:

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

Weitere Informationen finden Sie unter Obsoleting DatabaseErrorPage middleware (dotnet/aspnetcore #24987) (Markieren von DatabaseErrorPage-Middleware als veraltet (dotnet/aspnetcore #24987)).

ASP.NET Core-Modul (ANCM)

Wenn das ASP.NET Core-Modul (ANCM) bei der Installation von Visual Studio keine ausgewählte Komponente war oder wenn eine frühere Version des ANCM auf dem System installiert wurde, laden Sie den neuesten Installer für das .NET Core Hosting-Paket (direkter Download) herunter, und führen Sie das Installationsprogramm aus. Weitere Informationen finden Sie unter Das .NET Core-Hostingbundle.

Änderung des Anwendungsnamens

In .NET 6 normalisiert WebApplicationBuilder den Inhaltsstammpfad so, dass er mit DirectorySeparatorChar endet. Die meisten Apps, die von HostBuilder oder WebHostBuilder migriert werden, haben nicht denselben App-Namen, da sie nicht normalisiert sind. Weitere Informationen finden Sie unter SetApplicationName.

Überprüfen von Breaking Changes

Weitere Informationen finden Sie in den folgenden Ressourcen: