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
Program Visual Studio 2022 z pakietem roboczym tworzenia aplikacji ASP.NET i aplikacji internetowych.
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.razor
systemie , 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:
- [Zmiana powodująca niezgodność]: Aktualizacje uwierzytelniania w aplikacjach webassembly
- routing i nawigacja ASP.NET Core Blazor
- Zabezpieczanie ASP.NET Core Blazor WebAssembly
- Uwierzytelnianie i autoryzacja w aplikacjach Blazor na platformie ASP.NET Core
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.