Auf Englisch lesen

Freigeben über


Migrieren von ASP.NET Core 6.0 auf 7.0

In diesem Artikel wird erläutert, wie Sie ein vorhandenes ASP.NET Core 6.0-Projekt auf ASP.NET Core 7.0 aktualisieren.

Voraussetzungen

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

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

diff
{
  "sdk": {
-    "version": "6.0.200"
+    "version": "7.0.100"
  }
}

Aktualisieren des Zielframeworks

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

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

  <PropertyGroup>
-    <TargetFramework>net6.0</TargetFramework>
+    <TargetFramework>net7.0</TargetFramework>
  </PropertyGroup>

</Project>

Aktualisieren von Paketverweisen

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

diff
<ItemGroup>
-    <PackageReference Include="Microsoft.AspNetCore.JsonPatch" Version="6.0.9" />
-    <PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="6.0.9" />
-    <PackageReference Include="Microsoft.Extensions.Caching.Abstractions" Version="6.0.9" />
-    <PackageReference Include="System.Net.Http.Json" Version="6.0.0" />
+    <PackageReference Include="Microsoft.AspNetCore.JsonPatch" Version="7.0.0" />
+    <PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="7.0.0" />
+    <PackageReference Include="Microsoft.Extensions.Caching.Abstractions" Version="7.0.0" />
+    <PackageReference Include="System.Net.Http.Json" Version="7.0.0" />
</ItemGroup>

Blazor

Einführen von .NET 7-Features

Nachdem Sie die weiter oben in diesem Artikel beschriebene Anleitung zum Aktualisieren einer App auf 7.0 befolgt haben, können Sie bestimmte Features einführen, indem Sie den Links unter Neuerungen in ASP.NET Core 7.0 folgen.

Um alle neuen 7.0-Features für Blazor-Apps einzuführen, empfehlen wir den folgenden Prozess:

  • Erstellen Sie ein neues Blazor-Projekt für 7.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 7.0-App, und nehmen Sie Änderungen vor, um die neuen 7.0-Features einzuführen.

Vereinfachen der Komponentenparameterbindung

In früheren Blazor Versionen erforderte die Bindung über mehrere Komponenten hinweg eine Bindung an Eigenschaften mit get/set Accessoren.

In .NET 6 und früher:

razor
<NestedGrandchild @bind-GrandchildMessage="BoundValue" />

@code {
    ...

    private string BoundValue
    {
        get => ChildMessage ?? string.Empty;
        set => ChildMessageChanged.InvokeAsync(value);
    }
}

In .NET 7 können Sie die neuen @bind:get und @bind:set Modifizierer verwenden, um bidirektionale Datenbindung zu unterstützen und die Bindungssyntax zu vereinfachen:

razor
<NestedGrandchild @bind-GrandchildMessage:get="ChildMessage" 
    @bind-GrandchildMessage:set="ChildMessageChanged" />

Weitere Informationen finden Sie in den folgenden Inhalten im Artikel zur Datenbindung:

Migrieren von JavaScript-Interop-Aufrufen mit rückgängig gemachtem Marshallen

Interop-Aufrufe ohne Marshalling mit der Schnittstelle IJSUnmarshalledRuntime sind veraltet und sollten durch JavaScript-Interop-Aufrufe [JSImport]/[JSExport] ersetzt werden.

Weitere Informationen finden Sie unter JavaScript-Interoperabilität mit JSImport/JSExport mit ASP.NET CoreBlazor.

Blazor WebAssembly-Authentifizierung verwendet den Verlaufsstatus für Umleitungen.

Die Unterstützung für die Authentifizierung in Blazor WebAssembly-Apps wurde so geändert, dass sie vom Navigationsverlaufsstatus abhängig ist und nicht von Abfragezeichenfolgen in der URL. Daher kann nach einer erfolgreichen Anmeldung in .NET 7 nicht durch Übergeben der Rückgabe-URL in der Abfragezeichenfolge zur ursprünglichen Seite zurückgeleitet werden.

Das folgende Beispiel veranschaulicht den vorherigen Umleitungsansatz für Apps, die auf .NET 6 oder früher RedirectToLogin.razor ausgerichtet sind, die auf einer Umleitungs-URL (?returnUrl=) mit NavigateTo:

razor
@inject NavigationManager Navigation
@using Microsoft.AspNetCore.Components.WebAssembly.Authentication
@code {
    protected override void OnInitialized()
    {
        Navigation.NavigateTo(
            $"authentication/login?returnUrl={Uri.EscapeDataString(Navigation.Uri)}");
    }
}

Im folgenden Beispiel wird der neue Umleitungsansatz für Apps veranschaulicht , die auf .NET 7 oder höher RedirectToLogin.razorabzielen, die auf dem Navigationsverlaufszustand mit NavigateToLogin:

razor
@inject NavigationManager Navigation
@using Microsoft.AspNetCore.Components.WebAssembly.Authentication
@using Microsoft.Extensions.Options

@inject IOptionsSnapshot<RemoteAuthenticationOptions<ApiAuthorizationProviderOptions>> OptionsSnapshot
@code {
    protected override void OnInitialized()
    {
        Navigation.NavigateToLogin(OptionsSnapshot.Get(Options.DefaultName).AuthenticationPaths.LogInPath);
    }
}

Im Rahmen dieser Änderung ist SignOutSessionStateManager in .NET 7 oder höher veraltet und wird durch NavigateToLogout ersetzt.

Im folgenden Beispiel wird der vorherige Ansatz in Shared/LoginDisplay.razor einer App veranschaulicht, die über die Blazor WebAssembly-Projektvorlage generiert wurde:

razor
@inject SignOutSessionStateManager SignOutManager

...

@code{
    private async Task BeginLogout(MouseEventArgs args)
    {
        await SignOutManager.SetSignOutState();
        Navigation.NavigateTo("authentication/logout");
    }
}

Im folgenden Beispiel wird der neue Ansatz in diesem Shared/LoginDisplay.razor Aufruf veranschaulicht.NavigateToLogout Die Einschleusung (@inject) von SignOutSessionStateManager wird aus den Anweisungen der Komponente am Anfang der Datei entfernt, und die BeginLogOut-Methode in den folgenden Code aktualisiert:

razor
@code{
    public void BeginLogOut()
    {
        Navigation.NavigateToLogout("authentication/logout");
    }
}

Die SignOutSessionStateManager-Dienstregistrierung wird in Program.cs entfernt:

diff
- builder.Services.AddScoped<SignOutSessionStateManager>();

Weitere Informationen finden Sie in den folgenden Ressourcen:

.NET WebAssembly-Buildtools für .NET 6-Projekte

Sie können jetzt die .NET WebAssembly-Buildtools mit einem .NET 6-Projekt verwenden, wenn Sie das .NET 7 SDK nutzen. Die neue wasm-tools-net6-Workload enthält die .NET WebAssembly-Buildtools für .NET 6-Projekte, damit sie mit dem .NET 7 SDK verwendet werden können. Die vorhandene wasm-tools-Workload installiert die .NET WebAssembly-Buildtools für .NET 7-Projekte. Die .NET 7-Version der .NET WebAssembly-Buildtools ist jedoch nicht mit vorhandenen Projekten kompatibel, die mit .NET 6 erstellt wurden. Projekte, die die .NET WebAssembly-Buildtools verwenden, die sowohl .NET 6 als auch .NET 7 unterstützen müssen, müssen die Festlegung von Zielversionen verwenden.

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 7.0-Runtime enthält. Beachten Sie den folgenden Unterschied beim Befehl docker pull zwischen ASP.NET Core 6.0 und 7.0:

diff
- docker pull mcr.microsoft.com/dotnet/aspnet:6.0
+ docker pull mcr.microsoft.com/dotnet/aspnet:7.0

Überprüfen von Breaking Changes

Breaking Changes von .NET Core 6.0 zu .NET 7.0 finden Sie unter Breaking Changes in .NET 7. ASP.NET Core und Entity Framework Core sind in der Liste enthalten.