Миграция с ASP.NET Core 6.0 на 7.0
В этой статье объясняется, как обновить существующий проект ASP.NET Core 6.0 до ASP.NET Core 7.0.
Необходимые компоненты
Visual Studio 2022 с рабочей нагрузкой ASP.NET и веб-разработка.
Обновление версии пакета SDK для .NET Core в global.json
Если вы используете global.json файл для конкретной версии пакета SDK для .NET Core, обновите version
свойство до установленной версии пакета SDK для .NET 7.0. Например:
{
"sdk": {
- "version": "6.0.200"
+ "version": "7.0.100"
}
}
Обновление целевой платформы
Обновите moniker целевой платформы проекта (TFM) файла проекта следующим:net7.0
<Project Sdk="Microsoft.NET.Sdk.Web">
<PropertyGroup>
- <TargetFramework>net6.0</TargetFramework>
+ <TargetFramework>net7.0</TargetFramework>
</PropertyGroup>
</Project>
Обновление ссылок на пакеты
В файле проекта обновите каждый атрибут пакета Microsoft.AspNetCore.*, Microsoft.EntityFrameworkCore.*, Microsoft.Extensions.*, а также атрибут пакета Version
System.Net.Http.Json до 7.0.0 или более поздней версии. Например:
<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
Внедрение функций .NET 7
После выполнения инструкций, описанных ранее в этой статье, чтобы обновить приложение до версии 7.0, получите конкретные функции, следуя ссылкам, приведенным в статье "Новые возможности" ASP.NET Core 7.0.
Чтобы внедрить все новые функции версии 7.0 для Blazor приложений, рекомендуется выполнить следующий процесс:
- Создайте проект версии 7.0 Blazor из одного из Blazor шаблонов проектов. Дополнительные сведения см. в статье Инструментарий для ASP.NET Core Blazor.
- Переместите компоненты и код приложения в приложение 7.0, внося изменения в новые функции 7.0.
Упрощение привязки параметров компонента
В предыдущих Blazor выпусках привязка между несколькими компонентами требуется привязка к свойствам с get
/set
помощью методов доступа.
В .NET 6 и более ранних версиях:
<NestedGrandchild @bind-GrandchildMessage="BoundValue" />
@code {
...
private string BoundValue
{
get => ChildMessage ?? string.Empty;
set => ChildMessageChanged.InvokeAsync(value);
}
}
В .NET 7 можно использовать новые @bind:get
и модификаторы для поддержки двусторонней привязки данных и @bind:set
упрощения синтаксиса привязки:
<NestedGrandchild @bind-GrandchildMessage:get="ChildMessage"
@bind-GrandchildMessage:set="ChildMessageChanged" />
Дополнительные сведения см. в следующей статье о привязке данных:
Перенос немарсхоллированного взаимодействия JavaScript
Немарсхоллированный взаимодействие с помощью IJSUnmarshalledRuntime интерфейса устарело и должно быть заменено взаимодействием JavaScript/[JSImport]
[JSExport]
.
Дополнительные сведения см. в статье JavaScript JSImport/JSExport interop with ASP.NET Core Blazor.
Blazor WebAssembly проверка подлинности использует состояние журнала для перенаправлений
Поддержка проверки подлинности в Blazor WebAssembly приложениях изменилась, чтобы полагаться на состояние журнала навигации вместо строк запроса в URL-адресе. В результате передача URL-адреса возврата через строку запроса не может перенаправляться обратно на исходную страницу после успешного входа в .NET 7.
В следующем примере демонстрируется предыдущий подход к перенаправлению для приложений, предназначенных для .NET 6 или более ранних RedirectToLogin.razor
версий, который основан на URL-адресе перенаправления (?returnUrl=
) с NavigateTo:
@inject NavigationManager Navigation
@using Microsoft.AspNetCore.Components.WebAssembly.Authentication
@code {
protected override void OnInitialized()
{
Navigation.NavigateTo(
$"authentication/login?returnUrl={Uri.EscapeDataString(Navigation.Uri)}");
}
}
В следующем примере демонстрируется новый подход перенаправления для приложений, предназначенных для .NET 7 или более поздней версииRedirectToLogin.razor
, который основан на состоянии журнала навигации с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);
}
}
В рамках этого изменения SignOutSessionStateManager устарело в .NET 7 или более поздней версии и заменено NavigateToLogoutна .
В следующем примере демонстрируется предыдущий подход к Shared/LoginDisplay.razor
приложению, созданному на основе Blazor WebAssembly шаблона проекта:
@inject SignOutSessionStateManager SignOutManager
...
@code{
private async Task BeginLogout(MouseEventArgs args)
{
await SignOutManager.SetSignOutState();
Navigation.NavigateTo("authentication/logout");
}
}
В следующем примере демонстрируется новый подход в Shared/LoginDisplay.razor
этом вызове NavigateToLogout. Внедрение (@inject
) SignOutSessionStateManager директив компонента удаляется из директив компонента в верхней части файла, а BeginLogOut
метод обновляется до следующего кода:
@code{
public void BeginLogOut()
{
Navigation.NavigateToLogout("authentication/logout");
}
}
Регистрация SignOutSessionStateManager службы удаляется в Program.cs
:
- builder.Services.AddScoped<SignOutSessionStateManager>();
Дополнительные сведения см. на следующих ресурсах:
- [Критическое изменение]: обновления проверки подлинности в приложениях webassembly
- ASP.NET Базовая Blazor маршрутизация и навигация
- Защита ASP.NET Core Blazor WebAssembly
- Проверка подлинности и авторизация в Blazor ASP.NET Core
Средства сборки .NET WebAssembly для проектов .NET 6
Теперь вы можете использовать средства сборки .NET WebAssembly с проектом .NET 6 при работе с пакетом SDK для .NET 7. Новая wasm-tools-net6
рабочая нагрузка включает средства сборки .NET WebAssembly для проектов .NET 6, чтобы их можно было использовать с пакетом SDK для .NET 7. Существующая wasm-tools
рабочая нагрузка устанавливает средства сборки .NET WebAssembly для проектов .NET 7. Однако версия .NET 7 средств сборки .NET WebAssembly несовместима с существующими проектами, созданными с помощью .NET 6. Проекты с помощью средств сборки .NET WebAssembly, которые должны поддерживать .NET 6 и .NET 7, должны использовать многонацелие.
Обновление образов Docker
Для приложений с помощью Docker обновите инструкции и скрипты DockerfileFROM
. Используйте базовый образ, включающий среду выполнения ASP.NET Core 7.0. Рассмотрим следующую docker pull
разницу между ASP.NET Core 6.0 и 7.0:
- docker pull mcr.microsoft.com/dotnet/aspnet:6.0
+ docker pull mcr.microsoft.com/dotnet/aspnet:7.0
Просмотр критических изменений
Критические изменения из .NET Core 6.0 на .NET 7.0 см. в статье о критических изменениях в .NET 7. ASP.NET Core и Entity Framework Core включены в список.
ASP.NET Core