Udostępnij za pośrednictwem


Migrowanie z platformy ASP.NET Core 6.0 do wersji 7.0

W tym artykule wyjaśniono, jak zaktualizować istniejący projekt ASP.NET Core 6.0 w celu ASP.NET Core 7.0.

Wymagania wstępne

Aktualizowanie wersji zestawu .NET Core SDK w programie global.json

Jeśli używasz global.json pliku do kierowania określonej wersji zestawu .NET Core SDK, zaktualizuj version właściwość do zainstalowanej wersji zestawu .NET 7.0 SDK. Na przykład:

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

Aktualizowanie platformy docelowej

Zaktualizuj plik projektu Target Framework Moniker (TFM) na net7.0:

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

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

</Project>

Aktualizowanie odwołań do pakietów

W pliku projektu zaktualizuj atrybut odwołania pakietu Microsoft.AspNetCore.*, Microsoft.EntityFrameworkCore.*, Microsoft.Extensions.*i Atrybut pakietu System.Net.Http.Json do atrybutu Version 7.0.0 lub nowszego. Na przykład:

<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

Wdrażanie funkcji platformy .NET 7

Po wykonaniu wskazówek wcześniej w tym artykule, aby zaktualizować aplikację do wersji 7.0, zastosuj określone funkcje, postępując zgodnie z linkami w temacie Co nowego w programie ASP.NET Core 7.0.

Aby wdrożyć wszystkie nowe funkcje w wersji 7.0 dla Blazor aplikacji, zalecamy następujący proces:

  • Utwórz nowy projekt w wersji 7.0 Blazor na podstawie jednego z Blazor szablonów projektów. Aby uzyskać więcej informacji, zobacz Tooling for ASP.NET Core Blazor.
  • Przenieś składniki i kod aplikacji do aplikacji w wersji 7.0, wprowadzając modyfikacje w celu wdrożenia nowych funkcji w wersji 7.0.

Upraszczanie powiązania parametrów składnika

W poprzednich Blazor wersjach powiązanie między wieloma składnikami wymagało powiązania z właściwościami za pomocą get/set metod dostępu.

W programie .NET 6 i starszych wersjach:

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

@code {
    ...

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

Na platformie .NET 7 można użyć nowych @bind:get modyfikatorów, @bind:set aby obsługiwać dwukierunkowe powiązanie danych i uprościć składnię powiązania:

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

Aby uzyskać więcej informacji, zobacz następującą zawartość w artykule Powiązanie danych:

Migrowanie międzyoperacyjności języka JavaScript niezamężnej

Unmarshalled interop przy użyciu interfejsu IJSUnmarshalledRuntime jest przestarzały i powinien zostać zastąpiony międzyoperacyjnością języka JavaScript/[JSImport][JSExport].

Aby uzyskać więcej informacji, zobacz JavaScript JSImport/JSExport interop with ASP.NET Core (Interopcja javaScript JSImport/JSExport with ASP.NET Core Blazor).

Blazor WebAssembly uwierzytelnianie używa stanu historii dla przekierowań

Obsługa uwierzytelniania w Blazor WebAssembly aplikacjach została zmieniona tak, aby polegała na stanie historii nawigacji zamiast ciągów zapytania w adresie URL. W związku z tym przekazywanie zwrotnego adresu URL za pośrednictwem ciągu zapytania nie może przekierować z powrotem do oryginalnej strony po pomyślnym zalogowaniu się na platformie .NET 7.

W poniższym przykładzie pokazano wcześniejsze podejście przekierowania dla aplikacji przeznaczonych dla platformy .NET 6 lub starszej wersji programu RedirectToLogin.razor, która jest oparta na adresie URL przekierowania (?returnUrl=) za NavigateTopomocą polecenia :

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

W poniższym przykładzie pokazano nowe podejście do przekierowania dla aplikacji przeznaczonych dla platformy .NET 7 lub nowszej w RedirectToLogin.razorsystemie , która jest oparta na stanie historii nawigacji za pomocą polecenia 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);
    }
}

W ramach tej zmiany SignOutSessionStateManager element jest przestarzały na platformie .NET 7 lub nowszym i zastąpiony ciągiem NavigateToLogout.

W poniższym przykładzie pokazano wcześniejsze podejście w Shared/LoginDisplay.razor aplikacji wygenerowanej na podstawie szablonu Blazor WebAssembly projektu:

@inject SignOutSessionStateManager SignOutManager

...

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

W poniższym przykładzie pokazano nowe podejście, które Shared/LoginDisplay.razor wywołuje NavigateToLogoutmetodę . Iniekcja (@inject) SignOutSessionStateManager elementu jest usuwana z dyrektyw składnika w górnej części pliku, a BeginLogOut metoda jest aktualizowana do następującego kodu:

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

SignOutSessionStateManager Rejestracja usługi jest usuwana w pliku Program.cs:

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

Aby uzyskać więcej informacji, zobacz następujące zasoby:

Narzędzia kompilacji zestawu WebAssembly platformy .NET dla projektów platformy .NET 6

Teraz możesz używać narzędzi kompilacji zestawu WebAssembly platformy .NET z projektem platformy .NET 6 podczas pracy z zestawem .NET 7 SDK. Nowe wasm-tools-net6 obciążenie obejmuje narzędzia kompilacji zestawu .NET WebAssembly dla projektów platformy .NET 6, dzięki czemu mogą być używane z zestawem SDK platformy .NET 7. Istniejące wasm-tools obciążenie instaluje narzędzia kompilacji zestawu WebAssembly platformy .NET dla projektów platformy .NET 7. Jednak wersja .NET 7 narzędzi kompilacji zestawu WebAssembly platformy .NET jest niezgodna z istniejącymi projektami utworzonymi na platformie .NET 6. Projekty korzystające z narzędzi kompilacji zestawu WebAssembly platformy .NET, które muszą obsługiwać platformę .NET 6 i .NET 7, muszą używać wielu elementów docelowych.

Aktualizowanie obrazów platformy Docker

W przypadku aplikacji korzystających z platformy Docker zaktualizuj instrukcje i skrypty dockerfileFROM. Użyj obrazu podstawowego, który zawiera środowisko uruchomieniowe ASP.NET Core 7.0. Rozważ następującą docker pull różnicę poleceń między ASP.NET Core 6.0 i 7.0:

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

Przeglądanie zmian powodujących niezgodność

W przypadku zmian powodujących niezgodność z platformy .NET Core 6.0 do platformy .NET 7.0 zobacz Istotne zmiany na platformie .NET 7. ASP.NET Core i Entity Framework Core znajdują się na liście.