Поделиться через


Миграция с ASP.NET Core 6.0 на 7.0

В этой статье объясняется, как обновить существующий проект ASP.NET Core 6.0 до ASP.NET Core 7.0.

Необходимые компоненты

  • Visual Studio 2022 с рабочей нагрузкой ASP.NET и веб-разработка.

    Рабочие нагрузки установщика VS22

Обновление версии пакета 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>();

Дополнительные сведения см. на следующих ресурсах:

Средства сборки .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 включены в список.