Freigeben über


Migrieren von ASP.NET Core in .NET 6 zu .NET 7

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

Prerequisites

Aktualisieren der .NET 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 7 SDK-Version, die installiert ist. Beispiel:

{
  "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:

<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 -Attribut jedes Microsoft.AspNetCore.*-, Microsoft.EntityFrameworkCore.*-, Microsoft.Extensions.*- und Version-Paketverweises auf 7.0.0 oder höher. Beispiel:

<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 den Anweisungen weiter oben in diesem Artikel folgen, um eine App auf .NET 7 zu aktualisieren, übernehmen Sie bestimmte Features, indem Sie den Links unter "Neuigkeiten" in ASP.NET Core in .NET 7 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 oder früher:

<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:

<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 ausgerichtet sind, die auf einer Umleitungs-URL (RedirectToLogin.razor) mit ?returnUrl=:

@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öherRedirectToLogin.razorabzielen, die auf dem Navigationsverlaufszustand mit NavigateToLogin:

@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:

@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 Aufruf veranschaulicht.Shared/LoginDisplay.razor 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:

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

Die SignOutSessionStateManager-Dienstregistrierung wird in Program.cs entfernt:

- 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 das ASP.NET Core in der .NET 7-Laufzeitumgebung enthält. Beachten Sie den folgenden docker pull Befehlsunterschied zwischen ASP.NET Core in .NET 6 und .NET 7:

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

Bahnbrechende Änderungen

Verwenden Sie die Artikel in "Breaking changes in .NET ", um nach wichtigen Änderungen zu suchen, die beim Aktualisieren einer App auf eine neuere Version von .NET gelten können.