Migrieren von ASP.net Core 3,1 zu 5,0Migrate from ASP.NET Core 3.1 to 5.0

Von Scott AddieBy Scott Addie

In diesem Artikel wird erläutert, wie ein vorhandenes ASP.net Core 3,1-Projekt auf ASP.net Core 5,0 aktualisiert wird.This article explains how to update an existing ASP.NET Core 3.1 project to ASP.NET Core 5.0.

VoraussetzungenPrerequisites

Aktualisieren der .NET Core SDK-Version in „global.json“Update .NET Core SDK version in global.json

Wenn Sie sich für eine bestimmte .net Core SDK Version auf eine global.jsin der Datei verlassen, aktualisieren Sie die version -Eigenschaft auf die installierte Version von .net 5,0 SDK.If you rely upon a global.json file to target a specific .NET Core SDK version, update the version property to the .NET 5.0 SDK version that's installed. Beispiel:For example:

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

Aktualisieren des Ziel FrameworksUpdate the target framework

Wenn Sie ein Blazor WebAssembly Projekt aktualisieren, fahren Sie mit dem Abschnitt Blazor WebAssembly Projekte aktualisieren fort.If updating a Blazor WebAssembly project, skip to the Update Blazor WebAssembly projects section. Für alle anderen ASP.net Core Projekttyp aktualisieren Sie den zielframeworkmoniker (TFM) der Projektdatei auf Folgendes net5.0 :For any other ASP.NET Core project type, update the project file's Target Framework Moniker (TFM) to net5.0:

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

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

</Project>

Änderungen an Blazor der APP-Routing Logik in 5.0.1Changes to Blazor app routing logic in 5.0.1

Die Berechnung der Routen Rangfolge wurde in der Patch-Version ASP.net Core 5.0.1 geändert.The computation of route precedence changed in the ASP.NET Core 5.0.1 patch release. Dies kann sich auf Sie auswirken, wenn Sie Catch-All-Routen oder-Routen mit optionalen Parametern definiert haben.This might affect you if you've defined catch-all routes or routes with optional parameters.

Altes VerhaltenOld behavior

Mit dem früheren 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..With the prior behavior in ASP.NET Core 5.0.0 or earlier, routes with lower precedence, such as {*slug}, are matched before routes with higher precedence, such as /customer/{id}.

Neues VerhaltenNew behavior

Das neue Verhalten in ASP.net Core 5.0.1 oder höher stimmt genauer mit dem Routing Verhalten überein, das in ASP.net Core-apps definiert ist, wobei das Framework zuerst die Routen Rangfolge für jedes Segment berechnet und festlegt und nur die Länge der Route zum Unterbrechen von Verknüpfungen als sekundäre Kriterien verwendet.The new behavior in ASP.NET Core 5.0.1 or later more closely matches the routing behavior defined in ASP.NET Core apps, where the framework computes and establishes the route precedence for each segment first and only uses the length of the route to break ties as a secondary criteria.

Grund für die ÄnderungReason for change

Das ursprüngliche Verhalten wird in der Implementierung als Fehler betrachtet, da es sich um das Ziel des Routing Systems handelt, das sich auf Blazor die gleiche Weise verhält wie das ASP.net Core Routing System für die Teilmenge der Features, die durch das Routing unterstützt werden Blazor .The original behavior is considered a bug in the implementation because our goal is for the Blazor routing system to behave in the same way as the ASP.NET Core routing system for the subset of features supported by Blazor routing.

Fügen Sie das- PreferExactMatches Attribut der Router Komponente in App.razor der Datei hinzu, um das richtige Verhalten zu abonnieren:Add the PreferExactMatches attribute to the Router component in the App.razor file to opt into the correct behavior:

<Router AppAssembly="@typeof(Program).Assembly" PreferExactMatches="true">

Wenn PreferExactMatches auf festgelegt ist true , bevorzugt die Routen Zuordnung exakte Übereinstimmungen über Platzhalter.When PreferExactMatches is set to true, route matching prefers exact matches over wildcards.

Wichtig

Alle apps sollten explizit auf festgelegt werden PreferExactMatches true .All apps should explicitly set PreferExactMatches to true.

Die Möglichkeit, die Einstellung auf festzulegen PreferExactMatches false oder zu verlassen, wird nur aus Gründen der Abwärtskompatibilität bereitgestellt.The ability to set PreferExactMatches to false or leave it unset is only provided for backward compatibility.

Wenn .net 6 veröffentlicht wird, bevorzugt der Router immer exakte Übereinstimmungen, und die PreferExactMatches Option ist nicht verfügbar.When .NET 6 is released, the router will always prefer exact matches, and the PreferExactMatches option won't be available.

Aktualisieren Blazor WebAssembly und Blazor Server ProjekteUpdate Blazor WebAssembly and Blazor Server projects

Die Anleitungen in diesem Abschnitt gelten für beide Blazor Hostingmodelle. In den Abschnitten dieses Abschnitts finden Sie zusätzliche Anleitungen für das Hosting von Modellen und App-Typen. Wenden Sie die Anleitungen aus allen relevanten Abschnitten auf Ihre APP an.The guidance in this section applies to both Blazor hosting models. Sections following this section provide additional guidance specific to hosting models and app types. Apply the guidance from all relevant sections to your app.

  1. wwwroot/index.htmlFügen Sie in einer- Blazor WebAssembly app oder einer- Pages/_Host.cshtml Blazor Server App dem- <link> Element für Stile ein-Element hinzu <head> .In wwwroot/index.html of a Blazor WebAssembly app or the Pages/_Host.cshtml of a Blazor Server app, add a <link> element to the <head> element for styles. In den folgenden <link> Element href Attributwerten ist der Platzhalter {ASSEMBLY NAME} der AssemblyName der app.In the following <link> element href attribute values, the placeholder {ASSEMBLY NAME} is the app's assembly name.

    +<link href="{ASSEMBLY NAME}.styles.css" rel="stylesheet" />
    

    Eigenständiges Blazor WebAssembly oder Blazor Server Beispiel:Standalone Blazor WebAssembly or Blazor Server example:

    +<link href="BlazorSample.styles.css" rel="stylesheet" />
    

    Client Projekt eines gehosteten Blazor WebAssembly Lösungs Beispiels:Client project of a hosted Blazor WebAssembly solution example:

    +<link href="BlazorSample.Client.styles.css" rel="stylesheet" />
    
  2. Fügen Sie einen neuen Namespace in die Datei der APP _Imports.razor für die komponentenvirtualisierungein Microsoft.AspNetCore.Components.Web.Virtualization .Include a new namespace in the app's _Imports.razor file for component virtualization, Microsoft.AspNetCore.Components.Web.Virtualization. In den folgenden _Imports.razor Dateien werden die Standardnamespaces in apps angezeigt, die aus den Blazor Projektvorlagen generiert wurden.The following _Imports.razor files show the default namespaces in apps generated from the Blazor project templates. Der Platzhalter {ASSEMBLY NAME} ist der AssemblyName der app.The placeholder {ASSEMBLY NAME} is the app's assembly name.

    Blazor WebAssembly (_Imports.razor):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):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
    
  3. MainLayoutUmgeben Sie in der Shared/MainLayout.razor -Komponente () das HTML-Markup der Komponente mit einem- <div> Element, für das ein- class Attribut auf festgelegt ist page :In the MainLayout component (Shared/MainLayout.razor), surround the component's HTML markup with a <div> element that has a class attribute set to page:

    <div class="page">
    
        ...
    
    </div>
    
  4. Fügen Sie dem Ordner die folgenden Dateien hinzu Shared :Add the following files to the Shared folder:

    MainLayout.razor.css: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: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;
        }
    }
    
  5. Die neueste Basis wwwroot/css/app.css Datei einer APP Blazor WebAssembly oder einer wwwroot/css/site.css Datei einer Blazor Server app enthält die folgenden Stile.The latest base wwwroot/css/app.css file of a Blazor WebAssembly app or wwwroot/css/site.css file of a Blazor Server app includes the following styles. Entfernen Sie zusätzliche Stile, und übernehmen Sie die folgenden Stile und alle, die Sie der app hinzugefügt haben.Remove extra styles leaving the following styles and any that you've added to the app.

    Das folgende Stylesheet umfasst nur Basis Stile und enthält keine benutzerdefinierten Stile, die vom Entwickler hinzugefügt wurden:The following stylesheet only includes base styles and does not include custom styles added by the developer:

    @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 ProjektenUpdate Blazor WebAssembly projects

Befolgen Sie die Anweisungen im vorherigen Abschnitt zu Updates Blazor WebAssembly und Blazor Server Projekten .Follow the guidance in the preceding Update Blazor WebAssembly and Blazor Server projects section.

Blazor WebAssemblyWenden Sie für ein Projekt, einschließlich des Client Projekts einer gehosteten Blazor Lösung, die folgenden Änderungen auf die Projektdatei an:For a Blazor WebAssembly project, including the Client project of a hosted Blazor solution, apply the following changes to the project file:

  1. Aktualisieren Sie das SDK von Microsoft.NET.Sdk.Web auf Microsoft.NET.Sdk.BlazorWebAssembly :Update the SDK from Microsoft.NET.Sdk.Web to Microsoft.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 Lösungen.This update only applies to standalone Blazor WebAssembly projects and the Client projects of hosted Blazor solutions.

  2. Aktualisieren Sie die folgenden Eigenschaften:Update the following properties:

    <Project Sdk="Microsoft.NET.Sdk.BlazorWebAssembly">
    
      <PropertyGroup>
    -     <TargetFramework>netstandard2.1</TargetFramework>
    -     <RazorLangVersion>3.0</RazorLangVersion>
    +     <TargetFramework>net5.0</TargetFramework>
      </PropertyGroup>
    
  3. Entfernen Sie den Paket Verweis auf Microsoft. aspnetcore. Components. Webassembly. Build:Remove the package reference to Microsoft.AspNetCore.Components.WebAssembly.Build:

    <ItemGroup>
    -    <PackageReference Include="Microsoft.AspNetCore.Components.WebAssembly.Build" Version="3.2.1" PrivateAssets="all" />
    
  4. Aktualisieren Sie andere Pakete auf die neuesten Versionen.Update other packages to their latest versions. Die neuesten Versionen finden Sie unter NuGet.org.The latest versions can be found at NuGet.org.

  5. wwwroot/index.htmlÄndern Sie in das-Element, das die-Komponente lädt, in ein-Element, das App <div> id auf festgelegt ist app :In wwwroot/index.html, change the element that loads the App component to a <div> element with an id set to app:

    -<app>Loading...</app>
    +<div id="app">Loading...</div>
    
  6. In Program.Main (Program.cs):In Program.Main (Program.cs):

    • Ändern Sie den Verweis auf das <app> Element in einen CSS-Selektor, indem Sie einen Hashwert hinzufügen # .Change the reference to the <app> element to a CSS selector by adding a hash # to it.
    • Ändern HttpClient Sie die Registrierung in einen Bereich.Change the HttpClient registration to scoped.
    -builder.RootComponents.Add<App>("app");
    +builder.RootComponents.Add<App>("#app");
    
    -builder.Services.AddTransient(sp => new HttpClient 
    -    { BaseAddress = new Uri(builder.HostEnvironment.BaseAddress) });
    +builder.Services.AddScoped(sp => new HttpClient 
    +    { BaseAddress = new Uri(builder.HostEnvironment.BaseAddress) });
    

Eigenständige Blazor WebAssembly App mit Microsoft-KontenStandalone Blazor WebAssembly app with Microsoft Accounts

Befolgen Sie die Anweisungen in den vorherigen Abschnitten Update Blazor WebAssembly und Blazor Server Projekte und Update Blazor WebAssembly Projekte .Follow the guidance in the preceding Update Blazor WebAssembly and Blazor Server projects and Update Blazor WebAssembly projects sections.

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:For a standalone Blazor WebAssembly app registered in the Azure portal to use Azure Active Directory (AAD) for Microsoft Accounts:

  • Die APP erfordert die openid offline_access Bereiche und:The app requires the openid and offline_access scopes:

    options.ProviderOptions.DefaultAccessTokenScopes.Add("openid");
    options.ProviderOptions.DefaultAccessTokenScopes.Add("offline_access");
    
  • Auf dem Blatt Azure-Portal App-Registrierungs Authentifizierung :In the Azure portal app registration Authentication blade:

    1. Entfernen Sie die Webplattform -Konfiguration.Remove the Web platform configuration.
    2. Fügen Sie eine Einzelseiten-Anwendungs Platt Form Konfiguration mit dem Umleitungs-URI der APP hinzu.Add a Single-page application platform configuration with the app's redirect URI.
    3. Deaktivieren Sie die implizite Gewährung für Zugriffs Token und ID-Token.Disable Implicit grant for Access tokens and ID tokens.

Weitere Informationen finden Sie unter Sichern einer eigenständigen ASP.NET Core Blazor WebAssembly-App mit Microsoft-Konten.For more information, see Sichern einer eigenständigen ASP.NET Core Blazor WebAssembly-App mit Microsoft-Konten.

Eigenständige Blazor WebAssembly App mit Azure Active Directory (AAD)Standalone Blazor WebAssembly app with Azure Active Directory (AAD)

Befolgen Sie die Anweisungen in den vorherigen Abschnitten Update Blazor WebAssembly und Blazor Server Projekte und Update Blazor WebAssembly Projekte .Follow the guidance in the preceding Update Blazor WebAssembly and Blazor Server projects and Update Blazor WebAssembly projects sections.

Für eine eigenständige Blazor WebAssembly app, die im Azure-Portal registriert ist, um Azure Active Directory (AAD) zu verwenden:For a standalone Blazor WebAssembly app registered in the Azure portal to use Azure Active Directory (AAD):

  • Die APP erfordert den folgenden https://graph.microsoft.com/User.Read Bereich:The app requires the https://graph.microsoft.com/User.Read scope:

    options.ProviderOptions.DefaultAccessTokenScopes
        .Add("https://graph.microsoft.com/User.Read");
    
  • Auf dem Blatt Azure-Portal App-Registrierungs Authentifizierung :In the Azure portal app registration Authentication blade:

    1. Entfernen Sie die Webplattform -Konfiguration.Remove the Web platform configuration.
    2. Fügen Sie eine Einzelseiten-Anwendungs Platt Form Konfiguration mit dem Umleitungs-URI der APP hinzu.Add a Single-page application platform configuration with the app's redirect URI.
    3. Deaktivieren Sie die implizite Gewährung für Zugriffs Token und ID-Token.Disable Implicit grant for Access tokens and ID tokens.

Weitere Informationen finden Sie unter Sichern einer eigenständigen Blazor WebAssembly-App in ASP.NET Core mit Azure Active Directory.For more information, see Sichern einer eigenständigen Blazor WebAssembly-App in ASP.NET Core mit Azure Active Directory.

Eigenständige Blazor WebAssembly App mit Azure Active Directory (AAD) B2CStandalone Blazor WebAssembly app with Azure Active Directory (AAD) B2C

Befolgen Sie die Anweisungen in den vorherigen Abschnitten Update Blazor WebAssembly und Blazor Server Projekte und Update Blazor WebAssembly Projekte .Follow the guidance in the preceding Update Blazor WebAssembly and Blazor Server projects and Update Blazor WebAssembly projects sections.

Für eine eigenständige Blazor WebAssembly app, die im Azure-Portal registriert ist, um Azure Active Directory (AAD) B2C zu verwenden:For a standalone Blazor WebAssembly app registered in the Azure portal to use Azure Active Directory (AAD) B2C:

  • Die APP erfordert die openid offline_access Bereiche und:The app requires the openid and offline_access scopes:

    options.ProviderOptions.DefaultAccessTokenScopes.Add("openid");
    options.ProviderOptions.DefaultAccessTokenScopes.Add("offline_access");
    
  • Auf dem Blatt Azure-Portal App-Registrierungs Authentifizierung :In the Azure portal app registration Authentication blade:

    1. Entfernen Sie die Webplattform -Konfiguration.Remove the Web platform configuration.
    2. Fügen Sie eine Einzelseiten-Anwendungs Platt Form Konfiguration mit dem Umleitungs-URI der APP hinzu.Add a Single-page application platform configuration with the app's redirect URI.
    3. Deaktivieren Sie die implizite Gewährung für Zugriffs Token und ID-Token.Disable Implicit grant for Access tokens and ID tokens.

Weitere Informationen finden Sie unter Sichern einer eigenständigen Blazor WebAssembly-App in ASP.NET Core mit Azure Active Directory B2C.For more information, see Sichern einer eigenständigen Blazor WebAssembly-App in ASP.NET Core mit Azure Active Directory B2C.

Gehostete Blazor WebAssembly App mit Azure Active Directory (AAD) oder Aad B2CHosted Blazor WebAssembly app with Azure Active Directory (AAD) or AAD B2C

Befolgen Sie die Anweisungen in den vorherigen Abschnitten Update Blazor WebAssembly und Blazor Server Projekte und Update Blazor WebAssembly Projekte .Follow the guidance in the preceding Update Blazor WebAssembly and Blazor Server projects and Update Blazor WebAssembly projects sections.

Client Bei der APP-Registrierung einer gehosteten Blazor Lösung, die Aad oder Aad B2C für die Benutzerauthentifizierung verwendet, sollte eine Single-Page-Anwendung für die Azure-Apps-Plattform konfiguriert werden.The Client app registration of a hosted Blazor solution that uses AAD or AAD B2C for user authentication should use a Single-page application Azure Apps platform configuration.

Auf dem Client Blatt Azure-Portal App-Registrierungs Authentifizierung :In the Azure portal Client app registration Authentication blade:

  1. Entfernen Sie die Webplattform -Konfiguration.Remove the Web platform configuration.
  2. Fügen Sie eine Einzelseiten-Anwendungs Platt Form Konfiguration mit dem Umleitungs-URI der APP hinzu.Add a Single-page application platform configuration with the app's redirect URI.
  3. Deaktivieren Sie die implizite Gewährung für Zugriffs Token und ID-Token.Disable Implicit grant for Access tokens and ID tokens.

Weitere Informationen finden Sie unterFor more information, see:

Aktualisieren des Server Projekts einer gehosteten Blazor LösungUpdate the Server project of a hosted Blazor solution

Befolgen Sie die Anweisungen in den vorangehenden Abschnitten:Follow the guidance in the preceding sections:

Aktualisieren Sie das Server Projekt einer gehosteten Blazor Lösung als ASP.net Core-APP, indem Sie die allgemeine Anleitung in diesem Artikel befolgen.Update the Server project of a hosted Blazor solution as an ASP.NET Core app following the general guidance in this article.

Außerdem Server sollten Projekte, die Benutzer für Client- Blazor WebAssembly apps mit Azure Active Directory (AAD) oder B2C authentifizieren, neue Microsoft Identity v 2.0-Pakete übernehmen:Additionally, Server projects that authenticate users to client Blazor WebAssembly apps with Azure Active Directory (AAD) or B2C should adopt new Microsoft Identity v2.0 packages:

Für Aad:For AAD:

-<PackageReference Include="Microsoft.AspNetCore.Authentication.AzureAD.UI" Version="..." />
+<PackageReference Include="Microsoft.Identity.Web" Version="{VERSION}" />
+<PackageReference Include="Microsoft.Identity.Web.UI" Version="{VERSION}" />

Aad B2C:For 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 vorangehenden Paket Verweise die Paketversionen für die {VERSION} Platzhalter unter NuGet.org:For the preceding package references, determine the package versions for the {VERSION} placeholders at NuGet.org:

Hinweis

Das SDK des Server Projekts in einer gehosteten Blazor WebAssembly Lösung bleibt bestehen Microsoft.NET.Sdk.Web :The SDK of the Server project in a hosted Blazor WebAssembly solution remains Microsoft.NET.Sdk.Web:

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

Weitere Informationen finden Sie unterFor more information, see:

Bereinigen und Neuerstellen der Projekt MappeClean and rebuild the solution

Nachdem Sie die APP oder Lösung zu .net 5 migriert haben, müssen Sie die APP oder Projekt Mappe bereinigen und neu erstellenAfter migrating the app or solution to .NET 5, clean and rebuild the app or solution. Wenn Paket Inkompatibilitäten zwischen neuen Paket verweisen und zwischengespeicherten Paketen vorhanden sind:If package incompatibilities exist between new package references and cached packages:

  1. Löschen Sie die nuget-Paket Caches, indem Sie den folgenden dotnet nuget locals Befehl in einer Befehlsshell ausführen:Clear NuGet package caches by executing the following dotnet nuget locals command in a command shell:

    dotnet nuget locals --clear all
    
  2. Bereinigen und erneutes Erstellen der APP oder Projekt Mappe.Clean and rebuild the app or solution.

ProblembehandlungTroubleshoot

Befolgen Sie die Anleitung zur Problembehandlung am Ende des Blazor WebAssembly Sicherheits Themas, das für Ihre APP gilt:Follow the Troubleshoot guidance at the end of the Blazor WebAssembly security topic that applies to your app:

Eigenständige Blazor WebAssembly-Apps:Standalone Blazor WebAssembly apps:

Gehostete Blazor WebAssembly-Apps:Hosted Blazor WebAssembly apps:

Nicht autorisierter Client für Azure Active Directory (AAD)Unauthorized client for Azure Active Directory (AAD)

Nach dem Upgrade einer Blazor WebAssembly app, die Aad für die Authentifizierung verwendet, erhalten Sie möglicherweise die folgende Fehlermeldung für den Anmelde Rückruf an die APP, nachdem sich der Benutzer mit Aad angemeldet hat:After upgrading a Blazor WebAssembly app that uses AAD for authentication, you may receive the following error on the login callback to the app after the user signs in with AAD:

Info: Die Autorisierung von Microsoft.AspNetCore.Authorization.DefaultAuthorizationService[2] Authorization ist fehlgeschlagen.info: Microsoft.AspNetCore.Authorization.DefaultAuthorizationService[2] Authorization failed. Diese Anforderungen wurden nicht erfüllt: DenyAnonymousAuthorizationRequirement: Erfordert einen authentifizierten Benutzer.These requirements were not met: DenyAnonymousAuthorizationRequirement: Requires an authenticated user.

Anmelderückruffehler von AAD:Login callback error from AAD:

  • Fehler: unauthorized_clientError: unauthorized_client
  • Description (Beschreibung): AADB2C90058: The provided application is not configured to allow public clients.Description: AADB2C90058: The provided application is not configured to allow public clients.

So beheben Sie den FehlerTo resolve the error:

  1. Greifen Sie im Azure-Portal auf das Manifest der App zu.In the Azure portal, access the app's manifest.
  2. Legen Sie das Attribut allowPublicClient auf null oder true fest.Set the allowPublicClient attribute to null or true.

Aktualisieren einer Blazor progressiven Webanwendung (PWA)Update a Blazor Progressive Web Application (PWA)

Fügen Sie der Projektdatei der PWA-App Folgendes Element hinzu:Add the following item to the PWA app's project file:

<ItemGroup>
  <ServiceWorker Include="wwwroot\service-worker.js" 
    PublishedContent="wwwroot\service-worker.published.js" />
</ItemGroup>

Aktualisieren von Razor Klassenbibliotheken (rcls)Update Razor class libraries (RCLs)

Migrieren Sie Razor Klassenbibliotheken (rcls), um neue APIs oder Features zu nutzen, die als Teil von ASP.net Core 5,0 eingeführt werden.Migrate Razor class libraries (RCLs) to take advantage of new APIs or features that are introduced as part of ASP.NET Core 5.0.

So aktualisieren Sie eine RCL-Zielkomponente:To update a RCL that targets components:

  1. Aktualisieren Sie die folgenden Eigenschaften in der Projektdatei:Update the following properties in the project file:

    <Project Sdk="Microsoft.NET.Sdk.Razor">
    
      <PropertyGroup>
    -     <TargetFramework>netstandard2.0</TargetFramework>
    -     <RazorLangVersion>3.0</RazorLangVersion>
    +     <TargetFramework>net5.0</TargetFramework>
      </PropertyGroup>
    
  2. Aktualisieren Sie andere Pakete auf die neuesten Versionen.Update other packages to their latest versions. Die neuesten Versionen finden Sie unter NuGet.org.The latest versions can be found at NuGet.org.

Aktualisieren Sie die folgenden Eigenschaften in der Projektdatei, um eine RCL zu aktualisieren, die auf MVC ausgerichtet ist:To update an RCL targeting MVC, update the following properties in the project file:

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

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

Aktualisieren von PaketverweisenUpdate package references

Aktualisieren Sie in der Projektdatei alle Microsoft. aspnetcore. *, Microsoft. entityframeworkcore. *, Microsoft. Extensions. *, und System.Net.Http.Jsauf das Attribut des Paket Verweises auf Version 5.0.0 oder höher.In the project file, update each Microsoft.AspNetCore.*, Microsoft.EntityFrameworkCore.*, Microsoft.Extensions.*, and System.Net.Http.Json package reference's Version attribute to 5.0.0 or later. Beispiel:For example:

<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-ImagesUpdate Docker images

Aktualisieren Sie die dockerfile FROM -Anweisungen und-Skripts für apps, die Docker verwenden.For apps using Docker, update your Dockerfile FROM statements and scripts. Verwenden Sie ein Basis Image, das den ASP.net Core 5,0-Lauf Zeit Modul einschließt.Use a base image that includes the ASP.NET Core 5.0 runtime. Beachten Sie den folgenden docker pull Befehls Unterschied zwischen ASP.net Core 3,1 und 5,0:Consider the following docker pull command difference between ASP.NET Core 3.1 and 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 Depots in verschoben mcr.microsoft.com/dotnet .As part of the move to ".NET" as the product name, the Docker images moved from the mcr.microsoft.com/dotnet/core repositories to mcr.microsoft.com/dotnet. Weitere Informationen finden Sie unter dotnet/dotnet-docker # 1939.For more information, see dotnet/dotnet-docker#1939.

Änderungen an der Modell Bindung in ASP.net Core MVC und Razor SeitenModel binding changes in ASP.NET Core MVC and Razor Pages

DateTime-Werte sind als UTC-Zeitmodell gebunden.DateTime values are model bound as UTC times

In ASP.net Core 3,1 und früheren Versionen DateTime Warenwerte Modell gebunden als lokale Zeit, in der die Zeitzone vom Server bestimmt wurde.In ASP.NET Core 3.1 and earlier, DateTime values were model-bound as local time, where the timezone was determined by the server. DateTime Werte, die von der Eingabe Formatierung (JSON) und den Werten gebunden sind, DateTimeOffset wurden als UTC-Zeit Zonen gebunden.DateTime values bound from input formatting (JSON) and DateTimeOffset values were bound as UTC timezones.

In ASP.net Core 5,0 und höher bindet die Modell Bindung DateTime die Werte konsistent an die UTC-Zeitzone.In ASP.NET Core 5.0 and later, model binding consistently binds DateTime values with the UTC timezone.

Wenn Sie das vorherige Verhalten beibehalten möchten, entfernen Sie das DateTimeModelBinderProvider in Startup.ConfigureServices :To retain the previous behavior, remove the DateTimeModelBinderProvider in Startup.ConfigureServices:

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

Complexobjectmodelbinderprovider \ complexobjectmodelbinder Replace complextypemodelbinderprovider \ complextypemodelbinderComplexObjectModelBinderProvider \ ComplexObjectModelBinder replace ComplexTypeModelBinderProvider \ ComplexTypeModelBinder

Zum Hinzufügen der Unterstützung für Modell Bindung c# 9-Daten Satz Typen ComplexTypeModelBinderProvider ist:To add support for model binding C# 9 record types, the ComplexTypeModelBinderProvider is:

  • Als veraltet gekennzeichnet.Annotated as obsolete.
  • Nicht mehr standardmäßig registriert.No longer registered by default.

Apps, die auf dem vorhanden sein von in der-Auflistung basieren, ComplexTypeModelBinderProvider ModelBinderProviders müssen auf den neuen Binder Anbieter verweisen:Apps that rely on the presence of the ComplexTypeModelBinderProvider in the ModelBinderProviders collection need to reference the new binder provider:

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

Usedatabaseerrorpage veraltetUseDatabaseErrorPage obsolete

Die ASP.net Core 3,1-Vorlagen, die eine Option für einzelne Benutzerkonten enthalten, generieren einen-Rückruf UseDatabaseErrorPage .The ASP.NET Core 3.1 templates that include an option for individual user accounts generate a call to UseDatabaseErrorPage. UseDatabaseErrorPage ist mittlerweile veraltet und sollte durch eine Kombination von und ersetzt werden AddDatabaseDeveloperPageExceptionFilter UseMigrationsEndPoint , wie im folgenden Code gezeigt:UseDatabaseErrorPage is now obsolete and should be replaced with a combination of AddDatabaseDeveloperPageExceptionFilter and UseMigrationsEndPoint, as shown in the following code:

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.For more information, see this GitHub issue.

Wichtige Änderungen überprüfenReview breaking changes

Grundlegende Änderungen von .net Core 3,1 auf .net 5,0 finden Sie unter Breaking Changes for Migration from Version 3,1 to 5,0.For breaking changes from .NET Core 3.1 to .NET 5.0, see Breaking changes for migration from version 3.1 to 5.0. ASP.net Core und Entity Framework Core sind auch in der Liste enthalten.ASP.NET Core and Entity Framework Core are also included in the list.