Migrieren von ASP.NET Core 3.1 zu 5.0
In diesem Artikel wird erläutert, wie Sie ein vorhandenes ASP.NET Core 3.1-Projekt auf ASP.NET Core 5.0 aktualisieren. Anweisungen zum Migrieren von ASP.NET Core 3.1 zu ASP.NET Core 6.0 finden Sie unter Migrieren von ASP.NET Core 3.1 zu 6.0.
Voraussetzungen
- Visual Studio 2019 Version 16.8 oder höher mit der Workload ASP.NET und Webentwicklung
- .NET 5.0 SDK
Aktualisieren der .NET Core SDK-Version in „global.json“
Wenn Sie eine global.json-Datei als Ziel für eine bestimmte .NET Core SDK Version verwenden, aktualisieren Sie die version
-Eigenschaft auf die installierte .NET 5.0 SDK-Version. Beispiel:
{
"sdk": {
- "version": "3.1.200"
+ "version": "5.0.100"
}
}
Aktualisieren des Zielframeworks
Wenn Sie ein Blazor WebAssembly Projekt aktualisieren, fahren Sie mit dem Abschnitt Aktualisieren Blazor WebAssembly von Projekten fort. Aktualisieren Sie für alle anderen ASP.NET Core Projekttyp den Zielframeworkmoniker (Target Framework Moniker, TFM) der Projektdatei in net5.0
:
<Project Sdk="Microsoft.NET.Sdk.Web">
<PropertyGroup>
- <TargetFramework>netcoreapp3.1</TargetFramework>
+ <TargetFramework>net5.0</TargetFramework>
</PropertyGroup>
</Project>
Löschen bin
und obj
Ordner
Möglicherweise müssen Sie die bin
Ordner und obj
löschen. Führen Sie ausdotnet nuget locals --clear all
, um den NuGet Paketcache zu löschen.
Änderungen an der Blazor App-Routinglogik in Version 5.0.1 und weiteren Versionen von 5.x bis 6.0
Die Berechnung der Routenrangfolge hat sich im patch-Release ASP.NET Core 5.0.1 geändert. Dies kann Sich auf Sie auswirken, wenn Sie catch-all-Routen oder Routen mit optionalen Parametern definiert haben.
Altes Verhalten
Mit dem vorherigen Verhalten in ASP.NET Core 5.0.0 oder früher werden Routen mit niedrigerer Rangfolge, z{*slug}
. B. , vor Routen mit höherer Rangfolge abgeglichen, z/customer/{id}
. B. .
Neues Verhalten
Das neue Verhalten in ASP.NET Core 5.0.1 oder höher stimmt stärker mit dem Routingverhalten überein, das in ASP.NET Core-Apps definiert ist, wobei das Framework zuerst die Routenrangfolge für jedes Segment berechnet und festlegt und nur die Länge der Route verwendet, um Die Bindungen als sekundäre Kriterien zu unterbrechen.
Grund für die Änderung
Das ursprüngliche Verhalten wird als Fehler in der Implementierung betrachtet, da unser Ziel darin besteht, dass sich das Blazor Routingsystem auf die gleiche Weise verhält wie das ASP.NET Core Routingsystem für die Teilmenge der Features, die vom Routing unterstützt werdenBlazor.
Empfohlene Maßnahme
Fügen Sie der Komponente in der App.razor
Datei das PreferExactMatches
Router
-Attribut hinzu, um das richtige Verhalten zu wählen:
<Router AppAssembly="@typeof(Program).Assembly" PreferExactMatches="@true">
Wenn PreferExactMatches
auf @true
festgelegt ist, bevorzugt die Routenzuordnung exakte Übereinstimmungen gegenüber Platzhaltern.
Wichtig
Alle Apps sollte explizit auf festgelegt werden PreferExactMatches
@true
.
Die Möglichkeit, auf @false
festzulegen PreferExactMatches
oder die Einstellung nicht festzulegen, wird nur aus Gründen der Abwärtskompatibilität bereitgestellt.
Wenn .NET 6 veröffentlicht wird, bevorzugt der Router immer genaue Übereinstimmungen, und die PreferExactMatches
Option ist nicht verfügbar.
Aktualisieren Blazor WebAssembly und Blazor Server Projekte
Die Anleitung in diesem Abschnitt gilt für beide Blazor Hostingmodelle. Abschnitte, die diesem Abschnitt folgen, enthalten zusätzliche Anleitungen für das Hosten von Modellen und App-Typen. Wenden Sie die Anleitungen aus allen relevanten Abschnitten auf Ihre App an.
wwwroot/index.html
Fügen Sie in einer Blazor WebAssembly App oder derPages/_Host.cshtml
einer App dem -Element für Stile ein Blazor Server<link>
-Element<head>
hinzu. In den folgenden<link>
Elementattributwertenhref
ist der Platzhalter{ASSEMBLY NAME}
der Assemblyname der App.+<link href="{ASSEMBLY NAME}.styles.css" rel="stylesheet" />
Eigenständig Blazor WebAssembly oder Blazor Server Beispiel:
+<link href="BlazorSample.styles.css" rel="stylesheet" />
Client
Projekt eines Beispiels für eine gehostete Blazor WebAssembly Projektmappe:+<link href="BlazorSample.Client.styles.css" rel="stylesheet" />
Fügen Sie einen neuen Namespace in die Datei der App
_Imports.razor
für die Komponentenvirtualisierung ein, Microsoft.AspNetCore.Components.Web.Virtualization. Die folgenden_Imports.razor
Dateien zeigen die Standardnamespaces in Apps an, die aus den Blazor Projektvorlagen generiert wurden. Der Platzhalter{ASSEMBLY NAME}
ist der Assemblyname der App.Blazor WebAssembly (
_Imports.razor
):@using System.Net.Http @using System.Net.Http.Json @using Microsoft.AspNetCore.Components.Forms @using Microsoft.AspNetCore.Components.Routing @using Microsoft.AspNetCore.Components.Web @using Microsoft.AspNetCore.Components.Web.Virtualization @using Microsoft.AspNetCore.Components.WebAssembly.Http @using Microsoft.JSInterop @using {ASSEMBLY NAME} @using {ASSEMBLY NAME}.Shared
Blazor Server (
_Imports.razor
):@using System.Net.Http @using Microsoft.AspNetCore.Authorization @using Microsoft.AspNetCore.Components.Authorization @using Microsoft.AspNetCore.Components.Forms @using Microsoft.AspNetCore.Components.Routing @using Microsoft.AspNetCore.Components.Web @using Microsoft.AspNetCore.Components.Web.Virtualization @using Microsoft.JSInterop @using {ASSEMBLY NAME} @using {ASSEMBLY NAME}.Shared
Umschließt in der
MainLayout
-Komponente (Shared/MainLayout.razor
) das HTML-Markup der Komponente mit einem<div>
-Element, für das einclass
-Attribut aufpage
festgelegt ist:<div class="page"> ... </div>
Fügen Sie dem Ordner die
Shared
folgenden Dateien hinzu:MainLayout.razor.css
:.page { position: relative; display: flex; flex-direction: column; } .main { flex: 1; } .sidebar { background-image: linear-gradient(180deg, rgb(5, 39, 103) 0%, #3a0647 70%); } .top-row { background-color: #f7f7f7; border-bottom: 1px solid #d6d5d5; justify-content: flex-end; height: 3.5rem; display: flex; align-items: center; } .top-row ::deep a, .top-row .btn-link { white-space: nowrap; margin-left: 1.5rem; } .top-row a:first-child { overflow: hidden; text-overflow: ellipsis; } @media (max-width: 767.98px) { .top-row:not(.auth) { display: none; } .top-row.auth { justify-content: space-between; } .top-row a, .top-row .btn-link { margin-left: 0; } } @media (min-width: 768px) { .page { flex-direction: row; } .sidebar { width: 250px; height: 100vh; position: sticky; top: 0; } .top-row { position: sticky; top: 0; z-index: 1; } .main > div { padding-left: 2rem !important; padding-right: 1.5rem !important; } }
NavMenu.razor.css
:.navbar-toggler { background-color: rgba(255, 255, 255, 0.1); } .top-row { height: 3.5rem; background-color: rgba(0,0,0,0.4); } .navbar-brand { font-size: 1.1rem; } .oi { width: 2rem; font-size: 1.1rem; vertical-align: text-top; top: -2px; } .nav-item { font-size: 0.9rem; padding-bottom: 0.5rem; } .nav-item:first-of-type { padding-top: 1rem; } .nav-item:last-of-type { padding-bottom: 1rem; } .nav-item ::deep a { color: #d7d7d7; border-radius: 4px; height: 3rem; display: flex; align-items: center; line-height: 3rem; } .nav-item ::deep a.active { background-color: rgba(255,255,255,0.25); color: white; } .nav-item ::deep a:hover { background-color: rgba(255,255,255,0.1); color: white; } @media (min-width: 768px) { .navbar-toggler { display: none; } .collapse { /* Never collapse the sidebar for wide screens */ display: block; } }
Die neueste Basisdatei
wwwroot/css/app.css
einer Blazor WebAssembly App oderwwwroot/css/site.css
Datei einer Blazor Server App enthält die folgenden Stile. Entfernen Sie zusätzliche Stile, die die folgenden Stile und alle, die Sie der App hinzugefügt haben, belassen.Das folgende Stylesheet enthält nur Basisstile und keine benutzerdefinierten Stile, die vom Entwickler hinzugefügt wurden:
@import url('open-iconic/font/css/open-iconic-bootstrap.min.css'); html, body { font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; } a, .btn-link { color: #0366d6; } .btn-primary { color: #fff; background-color: #1b6ec2; border-color: #1861ac; } .content { padding-top: 1.1rem; } .valid.modified:not([type=checkbox]) { outline: 1px solid #26b050; } .invalid { outline: 1px solid red; } .validation-message { color: red; } #blazor-error-ui { background: lightyellow; bottom: 0; box-shadow: 0 -1px 2px rgba(0, 0, 0, 0.2); display: none; left: 0; padding: 0.6rem 1.25rem 0.7rem 1.25rem; position: fixed; width: 100%; z-index: 1000; } #blazor-error-ui .dismiss { cursor: pointer; position: absolute; right: 0.75rem; top: 0.5rem; }
Aktualisieren von Blazor WebAssembly Projekten
Befolgen Sie die Anweisungen im vorherigen Abschnitt Aktualisieren Blazor WebAssembly und Blazor Server Projekte .
Wenden Sie für ein Blazor WebAssembly Projekt, einschließlich des Client
Projekts einer gehosteten Blazor Projektmappe, die folgenden Änderungen auf die Projektdatei an:
Aktualisieren Sie das SDK von
Microsoft.NET.Sdk.Web
aufMicrosoft.NET.Sdk.BlazorWebAssembly
:- <Project Sdk="Microsoft.NET.Sdk.Web"> + <Project Sdk="Microsoft.NET.Sdk.BlazorWebAssembly">
Hinweis
Dieses Update gilt nur für eigenständige Blazor WebAssembly Projekte und die
Client
Projekte gehosteter Blazor Projektmappen.Aktualisieren Sie die folgenden Eigenschaften:
<Project Sdk="Microsoft.NET.Sdk.BlazorWebAssembly"> <PropertyGroup> - <TargetFramework>netstandard2.1</TargetFramework> - <RazorLangVersion>3.0</RazorLangVersion> + <TargetFramework>net5.0</TargetFramework> </PropertyGroup>
Entfernen Sie den Paketverweis auf Microsoft.AspNetCore.Components.WebAssembly.Build:
<ItemGroup> - <PackageReference Include="Microsoft.AspNetCore.Components.WebAssembly.Build" Version="3.2.1" PrivateAssets="all" />
Aktualisieren Sie andere Pakete auf die neuesten Versionen. Die neuesten Versionen finden Sie unter NuGet.org.
wwwroot/index.html
Ändern Sie in das -Element, das dieApp
Komponente in ein<div>
-Element lädt, wobei aufid
app
festgelegt ist:-<app>Loading...</app> +<div id="app">Loading...</div>
Program.Main
Ändern Sie in (Program.cs
) den Verweis auf das<app>
Element in einen CSS-Selektor, indem Sie ihm einen Hash#
hinzufügen:-builder.RootComponents.Add<App>("app"); +builder.RootComponents.Add<App>("#app");
Program.Main
Ändern Sie in (Program.cs
) eine vorübergehendeHttpClient
Standardregistrierung in bereichsmäßig, sofern vorhanden:-builder.Services.AddTransient(sp => new HttpClient - { BaseAddress = new Uri(builder.HostEnvironment.BaseAddress) }); +builder.Services.AddScoped(sp => new HttpClient + { BaseAddress = new Uri(builder.HostEnvironment.BaseAddress) });
In
Program.Main
(Program.cs
) derClient
App gehosteter Blazor Lösungen:- Ersetzen
builder.HostEnvironment.BaseAddress
Sie optional Zeichenfolgenclient-Basisadressen. - Ändern Sie alle benannten temporären Clientfactoryregistrierungen in bereichsgebunden.
-builder.Services.AddHttpClient("{APP NAMESPACE}.ServerAPI", - client => client.BaseAddress = new Uri("https://localhost:5001")) - .AddHttpMessageHandler<BaseAddressAuthorizationMessageHandler>(); -builder.Services.AddTransient(sp => sp.GetRequiredService<IHttpClientFactory>() - .CreateClient("{APP NAMESPACE}.ServerAPI")); +builder.Services.AddHttpClient("{APP NAMESPACE}.ServerAPI", + client => client.BaseAddress = new Uri(builder.HostEnvironment.BaseAddress)) + .AddHttpMessageHandler<BaseAddressAuthorizationMessageHandler>(); +builder.Services.AddScoped(sp => sp.GetRequiredService<IHttpClientFactory>() + .CreateClient("{APP NAMESPACE}.ServerAPI"));
Im vorangehenden Code ist der
{APP NAMESPACE}
Platzhalter der Namespace der App.- Ersetzen
Eigenständige Blazor WebAssembly App mit Microsoft-Konten
Befolgen Sie die Anweisungen in den vorherigen Abschnitten Aktualisieren Blazor WebAssembly und Blazor Server Projekte und Aktualisieren Blazor WebAssembly von Projekten .
Für eine eigenständige Blazor WebAssembly App, die im Azure-Portal registriert ist, um Azure Active Directory (AAD) für Microsoft-Konten zu verwenden:
Für die App sind die
openid
Bereiche undoffline_access
erforderlich:options.ProviderOptions.DefaultAccessTokenScopes.Add("openid"); options.ProviderOptions.DefaultAccessTokenScopes.Add("offline_access");
Auf dem Blatt Authentifizierung der Azure-Portal App-Registrierung:
- Entfernen Sie die Webplattformkonfiguration .
- Fügen Sie eine Single-Page-Anwendungsplattformkonfiguration mit dem Umleitungs-URI der App hinzu.
- Deaktivieren Sie die implizite Gewährung für Zugriffstoken und ID-Token.
Weitere Informationen finden Sie unter Schützen einer eigenständigen Blazor WebAssembly ASP.NET Core-App mit Microsoft-Konten.
Eigenständige Blazor WebAssembly App mit Azure Active Directory (AAD)
Befolgen Sie die Anweisungen in den vorherigen Abschnitten Aktualisieren Blazor WebAssembly und Blazor Server Projekte und Aktualisieren Blazor WebAssembly von Projekten .
Für eine eigenständige Blazor WebAssembly App, die im Azure-Portal registriert ist, um Azure Active Directory (AAD) zu verwenden:
Die App erfordert den
https://graph.microsoft.com/User.Read
Bereich:options.ProviderOptions.DefaultAccessTokenScopes .Add("https://graph.microsoft.com/User.Read");
Auf dem Blatt Authentifizierung der Azure-Portal App-Registrierung:
- Entfernen Sie die Webplattformkonfiguration .
- Fügen Sie eine Single-Page-Anwendungsplattformkonfiguration mit dem Umleitungs-URI der App hinzu.
- Deaktivieren Sie die implizite Gewährung für Zugriffstoken und ID-Token.
Weitere Informationen finden Sie unter Schützen einer eigenständigen Blazor WebAssembly ASP.NET Core-App mit Azure Active Directory.
Eigenständige Blazor WebAssembly App mit Azure Active Directory B2C (AAD)
Befolgen Sie die Anweisungen in den vorherigen Abschnitten Aktualisieren Blazor WebAssembly und Blazor Server Projekte und Aktualisieren Blazor WebAssembly von Projekten .
Für eine eigenständige Blazor WebAssembly App, die im Azure-Portal registriert ist, um Azure Active Directory (AAD) B2C zu verwenden:
Für die App sind die
openid
Bereiche undoffline_access
erforderlich:options.ProviderOptions.DefaultAccessTokenScopes.Add("openid"); options.ProviderOptions.DefaultAccessTokenScopes.Add("offline_access");
Auf dem Blatt Authentifizierung der Azure-Portal App-Registrierung:
- Entfernen Sie die Webplattformkonfiguration .
- Fügen Sie eine Single-Page-Anwendungsplattformkonfiguration mit dem Umleitungs-URI der App hinzu.
- Deaktivieren Sie die implizite Gewährung für Zugriffstoken und ID-Token.
Weitere Informationen finden Sie unter Schützen einer eigenständigen ASP.NET Core-App Blazor WebAssembly mit Azure Active Directory B2C.
Gehostete Blazor WebAssembly App mit Azure Active Directory (AAD) oder AAD B2C
Befolgen Sie die Anweisungen in den vorherigen Abschnitten Aktualisieren Blazor WebAssembly und Blazor Server Projekte und Aktualisieren Blazor WebAssembly von Projekten .
Die Client
App-Registrierung einer gehosteten Blazor Lösung, die AAD oder AAD B2C für die Benutzerauthentifizierung verwendet, sollte eine Azure Apps-Plattformkonfiguration mit einer Single-Page-Anwendung verwenden.
Auf dem Blatt Authentifizierung der Azure-Portal Client
App-Registrierung:
- Entfernen Sie die Webplattformkonfiguration .
- Fügen Sie eine Single-Page-Anwendungsplattformkonfiguration mit dem Umleitungs-URI der App hinzu.
- Deaktivieren Sie die implizite Gewährung für Zugriffstoken und ID-Token.
Weitere Informationen finden Sie unter
- Schützen einer gehosteten ASP.NET Core Blazor WebAssembly-App mit Azure Active Directory
- Schützen einer gehosteten ASP.NET Core Blazor WebAssembly-App mit Azure Active Directory B2C
Aktualisieren des Serverprojekts einer gehosteten Blazor Projektmappe
Befolgen Sie die Anweisungen in den vorherigen Abschnitten:
- Aktualisieren Blazor WebAssembly und Blazor Server Projekte
- Aktualisieren von Blazor WebAssembly Projekten
- Der Abschnitt, der für den Anbieter der App mit Azure Active Directory gilt:
Aktualisieren Sie das Server
Projekt einer gehosteten Blazor Projektmappe als ASP.NET Core-App gemäß der allgemeinen Anleitung in diesem Artikel.
Darüber hinaus sollten Projekte, Server
die Benutzer für Client-Apps Blazor WebAssembly mit Azure Active Directory (AAD) oder B2C authentifizieren, neue Microsoft Identity v2.0-Pakete übernehmen:
Für AAD:
-<PackageReference Include="Microsoft.AspNetCore.Authentication.AzureAD.UI" Version="..." />
+<PackageReference Include="Microsoft.Identity.Web" Version="{VERSION}" />
+<PackageReference Include="Microsoft.Identity.Web.UI" Version="{VERSION}" />
Für AAD B2C:
-<PackageReference Include="Microsoft.AspNetCore.Authentication.AzureADB2C.UI" Version="..." />
+<PackageReference Include="Microsoft.Identity.Web" Version="{VERSION}" />
+<PackageReference Include="Microsoft.Identity.Web.UI" Version="{VERSION}" />
Bestimmen Sie für die vorherigen Paketverweise die Paketversionen für die {VERSION}
Platzhalter auf NuGet.org:
Hinweis
Das SDK des Server
Projekts in einer gehosteten Blazor WebAssembly Projektmappe bleibt Microsoft.NET.Sdk.Web
:
<Project Sdk="Microsoft.NET.Sdk.Web">
Weitere Informationen finden Sie unter
- Schützen einer gehosteten ASP.NET Core Blazor WebAssembly-App mit Azure Active Directory
- Schützen einer gehosteten ASP.NET Core Blazor WebAssembly-App mit Azure Active Directory B2C
Bereinigen und Neuerstellen der Projektmappe
Nachdem Sie die App oder Projektmappe zu .NET 5 migriert haben, bereinigen Sie die App oder Projektmappe, und erstellen Sie sie neu. Wenn Paketinkompatibilitäten zwischen neuen Paketverweisen und zwischengespeicherten Paketen bestehen:
Löschen Sie NuGet Paketcaches, indem Sie den folgenden
dotnet nuget locals
Befehl in einer Befehlsshell ausführen:dotnet nuget locals --clear all
Bereinigen Sie die App oder Projektmappe, und erstellen Sie sie neu.
Problembehandlung
Befolgen Sie die Anleitung zur Problembehandlung am Ende des Sicherheitsthemas, das Blazor WebAssembly für Ihre App gilt:
Eigenständige Blazor WebAssembly-Apps:
- Allgemeiner Leitfaden für OIDC-Anbieter und die WebAssembly-Authentifizierungsbibliothek
- Microsoft-Konten
- Azure Active Directory (AAD)
- Azure Active Directory (AAD) B2C
Gehostete Blazor WebAssembly-Apps:
Nicht autorisierter Client für Azure Active Directory (AAD)
Nach dem Upgrade einer Blazor WebAssembly App, die AAD für die Authentifizierung verwendet, erhalten Sie möglicherweise den folgenden Fehler beim Anmelderückruf an die App, nachdem sich der Benutzer mit AAD angemeldet hat:
Info: Die Autorisierung von Microsoft.AspNetCore.Authorization.DefaultAuthorizationService[2] Authorization ist fehlgeschlagen. Diese Anforderungen wurden nicht erfüllt: DenyAnonymousAuthorizationRequirement: Erfordert einen authentifizierten Benutzer.
Anmelderückruffehler von AAD:
- Fehler:
unauthorized_client
- Description (Beschreibung):
AADB2C90058: The provided application is not configured to allow public clients.
So beheben Sie den Fehler
- Greifen Sie im Azure-Portal auf das Manifest der App zu.
- Legen Sie das
allowPublicClient
-Attribut aufnull
odertrue
fest.
Aktualisieren einer Blazor progressiven Webanwendung (PWA)
Fügen Sie der Projektdatei der PWA-App das folgende Element hinzu:
<ItemGroup>
<ServiceWorker Include="wwwroot\service-worker.js"
PublishedContent="wwwroot\service-worker.published.js" />
</ItemGroup>
Link zum Css-Isolations-Stylesheet für die Vorschau entfernen
Wenn die (Blazor WebAssembly) oder Pages/_Host.cshtml
(Blazor Server) des Projekts wwwroot/index.html
ein Stylesheetelement <link>
für scoped.styles.css
aus einer früheren Vorschauversion von 5.0 enthält, entfernen Sie das <link>
-Tag:
-<link href="_framework/scoped.styles.css/" rel="stylesheet" />
Aktualisieren Razor von Klassenbibliotheken (RCLs)
Migrieren Sie Razor Klassenbibliotheken (RCLs), um neue APIs oder Features zu nutzen, die im Rahmen von ASP.NET Core 5.0 eingeführt werden.
So aktualisieren Sie eine RCL für Komponenten:
Aktualisieren Sie die folgenden Eigenschaften in der Projektdatei:
<Project Sdk="Microsoft.NET.Sdk.Razor"> <PropertyGroup> - <TargetFramework>netstandard2.0</TargetFramework> - <RazorLangVersion>3.0</RazorLangVersion> + <TargetFramework>net5.0</TargetFramework> </PropertyGroup>
Aktualisieren Sie andere Pakete auf die neuesten Versionen. Die neuesten Versionen finden Sie unter 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>net5.0</TargetFramework>
<AddRazorSupportForMvc>true</AddRazorSupportForMvc>
</PropertyGroup>
Aktualisieren von Paketverweisen
Aktualisieren Sie in der Projektdatei das Attribut jedes Microsoft.AspNetCore.*-, Microsoft.EntityFrameworkCore.*-, Microsoft.Extensions.*- und System.Net.Http.Json-PaketverweissVersion
auf 5.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="5.0.0" />
+ <PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="5.0.0">
+ <PackageReference Include="Microsoft.Extensions.Caching.Abstractions" Version="5.0.0" />
+ <PackageReference Include="System.Net.Http.Json" Version="5.0.0" />
</ItemGroup>
Aktualisieren von Docker-Images
Aktualisieren Sie für Apps, die Docker verwenden, Ihre Dockerfile-AnweisungenFROM
und -Skripts. Verwenden Sie ein Basisimage, das die ASP.NET Core 5.0-Runtime enthält. Beachten Sie den folgenden docker pull
Befehlsunterschied zwischen ASP.NET Core 3.1 und 5.0:
- docker pull mcr.microsoft.com/dotnet/core/aspnet:3.1
+ docker pull mcr.microsoft.com/dotnet/aspnet:5.0
Im Rahmen der Umstellung auf ".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 dotnet/dotnet-docker#1939.
Änderungen der Modellbindung in ASP.NET Core MVC und Razor Pages
DateTime-Werte sind als UTC-Zeiten an das Modell gebunden.
In ASP.NET Core 3.1 und früheren DateTime
Versionen waren Werte als Ortszeit modellgebunden, wobei die Zeitzone vom Server bestimmt wurde. DateTime
Von der Eingabeformatierung (JSON) gebundene Werte und DateTimeOffset
Werte wurden als UTC-Zeitzonen gebunden.
In ASP.NET Core Version 5.0 und höher bindet DateTime
die Modellbindung konsistent Werte an die UTC-Zeitzone.
Um das vorherige Verhalten beizubehalten, entfernen Sie in DateTimeModelBinderProvider
Startup.ConfigureServices
:
services.AddControllersWithViews(options =>
options.ModelBinderProviders.RemoveType<DateTimeModelBinderProvider>());
ComplexObjectModelBinderProvider \ ComplexObjectModelBinder ersetzen ComplexTypeModelBinderProvider \ ComplexTypeModelBinder
Um Unterstützung für die Modellbindung von C# 9-Eintragstypen hinzuzufügen, ist der ComplexTypeModelBinderProvider folgende:
- Als veraltet kommentiert.
- Standardmäßig nicht mehr registriert.
Apps, die auf dem Vorhandensein von ComplexTypeModelBinderProvider
in der ModelBinderProviders
Sammlung basieren, 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 durch eine Kombination aus AddDatabaseDeveloperPageExceptionFilter
und UseMigrationsEndPoint
ersetzt werden, wie im folgenden Code gezeigt:
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 in diesem GitHub-Issue.
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 war, laden Sie den neuesten .NET Core Hosting Bundle Installer (direkter Download) herunter, und führen Sie das Installationsprogramm aus. Weitere Informationen finden Sie unter Hosting Bundle.
Überprüfen von Breaking Changes
Breaking Changes von .NET Core 3.1 zu .NET 5.0 finden Sie unter Breaking Changes für die Migration von Version 3.1 zu 5.0. ASP.NET Core und Entity Framework Core sind ebenfalls in der Liste enthalten.