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
- Visual Studio 2022 mit der Workload ASP.NET und Webentwicklung
- .NET 6.0 SDK
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
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>
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 Dockerfile-FROM
-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:
- Identity: Bootstrap-Standardversion der Benutzeroberfläche geändert
- Breaking Changes bei der Migration von Version 3.1 zu Version 5.0 ASP.NET Core und Entity Framework Core sind in der Liste enthalten.
- Breaking Changes in .NET 6: Umfasst ASP.NET Core und Entity Framework Core.
- GitHub-Repository „Announcements“ („aspnet/Announcements“, Bezeichnung:
6.0.0
): Enthält Informationen zu Breaking Changes und zu Nonbreaking Changes. - GitHub-Repository „Announcements“ („aspnet/Announcements“, Bezeichnung:
5.0.0
): Enthält Informationen zu Breaking Changes und zu Nonbreaking Changes.