Freigeben über


Migrieren von ASP.NET Core 3.1 zu .NET 6

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

Voraussetzungen

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

Wenn Sie sich auf eine global.json Datei verlassen, die auf eine bestimmte .NET SDK-Version ausgerichtet ist, aktualisieren Sie die version Eigenschaft auf die .NET 6 SDK-Version, die installiert ist. 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. Zum 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. Apps, die von ASP.NET Core 3.1 zu .NET 6 migriert werden, müssen nicht das minimale Hostingmodell verwenden, und der Startup, 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.

Um auf das neue Minimalhostingmodell mithilfe des folgenden Musters, das in den ASP.NET Core in .NET 6-Vorlagen verwendet wird, umzustellen, sehen Sie sich Codebeispiele an, die auf das neue minimale Hostingmodell in ASP.NET Core in .NET 6 migriert wurden und die Migration von ASP.NET Core in .NET 5 zu .NET 6 an.

Aktualisieren von Razor-Klassenbibliotheken (RCLs)

Migrieren Sie Razor Klassenbibliotheken (RCLs), um neue APIs oder Features zu nutzen, die als Teil von ASP.NET Core in .NET 6 eingeführt werden.

So aktualisieren Sie eine RCL, die sich auf Komponenten bezieht:

  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 Model View Controller (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

Für Apps, die Docker verwenden, aktualisieren Sie Ihre DockerfileFROM-Anweisungen und Skripte. Verwenden Sie ein Basisimage, das den ASP.NET Core in .NET 6 Runtime enthält. Beachten Sie den folgenden docker pull Befehlsunterschied zwischen ASP.NET Core 3.1 und .NET 6:

- 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 oder früheren DateTime Versionen waren Werte modellgebunden als ortszeit, wobei die Zeitzone vom Server bestimmt wurde. Durch die Eingabeformatierung (JSON) gebundene DateTime-Werte und DateTimeOffset-Werte wurden als UTC-Zeitzonen gebunden.

In .NET 5 oder höher bindet die Modellbindung DateTime Werte konsistent mit der UTC-Zeitzone.

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

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

ComplexObjectModelBinderProvider \ ComplexObjectModelBinder ersetzen Sie 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: