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


Переход с ASP.NET Core 3.1 на 6.0

В этой статье объясняется, как обновить существующий проект ASP.NET Core 3.1 до ASP.NET Core 6.0. Сведения об обновлении с ASP.NET Core 5.0 до 6.0 см. в статье "Миграция с ASP.NET Core 5.0 на 6.0".

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

Обновление версии пакета SDK для .NET в global.json

Если вы используете global.json файл для конкретной версии пакета SDK для .NET, обновите version свойство до установленной версии пакета SDK для .NET 6.0. Например:

{
  "sdk": {
-    "version": "3.1.200"
+    "version": "6.0.100"
  }
}

Обновление целевой платформы

Обновите moniker целевой платформы проекта (TFM) файла проекта следующим:net6.0

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

  <PropertyGroup>
-    <TargetFramework>netcoreapp3.1</TargetFramework>
+    <TargetFramework>net6.0</TargetFramework>
  </PropertyGroup>

</Project>

Обновление ссылок на пакеты

В файле проекта обновите каждый Microsoft.AspNetCore.*атрибут , Microsoft.Extensions.*Microsoft.EntityFrameworkCore.*и System.Net.Http.Json ссылку на Version пакет до 6.0.0 или более поздней версии. Например:

<ItemGroup>
-    <PackageReference Include="Microsoft.AspNetCore.JsonPatch" Version="3.1.6" />
-    <PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="3.1.6" />
-    <PackageReference Include="Microsoft.Extensions.Caching.Abstractions" Version="3.1.6" />
-    <PackageReference Include="System.Net.Http.Json" Version="3.2.1" />
+    <PackageReference Include="Microsoft.AspNetCore.JsonPatch" Version="6.0.0" />
+    <PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="6.0.0" />
+    <PackageReference Include="Microsoft.Extensions.Caching.Abstractions" Version="6.0.0" />
+    <PackageReference Include="System.Net.Http.Json" Version="6.0.0" />
</ItemGroup>

Удаление bin и obj папки

Возможно, потребуется удалить bin папки и obj папки. Выполните команду dotnet nuget locals --clear all , чтобы очистить кэш пакетов NuGet.

Минимальная модель размещения

Шаблоны ASP.NET Core создают код с помощью новой минимальной модели размещения. Минимальная модель размещения объединяет Startup.cs и Program.cs в один Program.cs файл. ConfigureServices и Configure больше не используются. Приложения, перенесенные с ASP.NET Core 3.1 до 6.0, не должны использовать минимальную модель размещения, используя Startup и универсальный узел , используемый шаблонами ASP.NET Core 3.1, полностью поддерживается.

Сведения об использовании Startup с новой минимальной моделью размещения см. в статье "Использование запуска с новой минимальной моделью размещения".

Чтобы перейти к новой модели минимального размещения с помощью следующего шаблона, используемого шаблонами ASP.NET Core 6.0, см . примеры кода, перенесенные в новую минимальную модель размещения в ASP.NET Core 6.0 и миграция с ASP.NET Core 5.0 на 6.0

Обновление Razor библиотек классов (RCLs)

Перенос Razor библиотек классов (RCLs) для использования новых API или функций, представленных в рамках ASP.NET Core 6.0.

Чтобы обновить RCL, предназначенный для компонентов, выполните следующие действия.

  1. Обновите следующие свойства в файле проекта:

    <Project Sdk="Microsoft.NET.Sdk.Razor">
      <PropertyGroup>
    -     <TargetFramework>netstandard2.0</TargetFramework>
    -     <RazorLangVersion>3.0</RazorLangVersion>
    +     <TargetFramework>net6.0</TargetFramework>
      </PropertyGroup>
    
  2. Обновите другие пакеты до последних версий. Последние версии можно найти на NuGet.org.

Чтобы обновить RCL для MVC, обновите следующие свойства в файле проекта:

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

  <PropertyGroup>
-    <TargetFramework>netcoreapp3.1</TargetFramework>
+    <TargetFramework>net6.0</TargetFramework>
    <AddRazorSupportForMvc>true</AddRazorSupportForMvc>
  </PropertyGroup>

Blazor

Чтобы применить все функции 5.0 и 6.0 для Blazor приложений, рекомендуется выполнить следующий процесс:

  • Создайте проект версии 6.0 Blazor из одного из Blazor шаблонов проектов. Дополнительные сведения см. в статье Инструментарий для ASP.NET Core Blazor.
  • Переместите компоненты и код приложения в приложение 6.0, внося изменения в новые функции 5.0 и 6.0.

Обновление образов Docker

Для приложений с помощью Docker обновите инструкции и скрипты DockerfileFROM. Используйте базовый образ, включающий среду выполнения ASP.NET Core 6.0. Рассмотрим следующее docker pull различие между ASP.NET Core 3.1 и 6.0:

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

В рамках перехода на .NET в качестве имени продукта образы Docker перемещаются из mcr.microsoft.com/dotnet/core репозиториев mcr.microsoft.com/dotnetв . Дополнительные сведения см. в разделе .NET 5.0 . Изменение имени репозитория Docker (dotnet/dotnet-docker #1939).

Изменения привязки модели в ASP.NET Core MVC и Razor Pages

DateTime значения привязаны к модели в формате UTC

В ASP.NET Core 3.1 и более ранних DateTime версий значения были привязаны к модели как локальное время, где часовой пояс был определен сервером. DateTime значения, привязанные к входным форматированию (JSON), и DateTimeOffset значения были привязаны как часовые пояса UTC.

В ASP.NET Core 5.0 и более поздних версий привязка модели последовательно связывает DateTime значения с часовым поясом UTC.

Чтобы сохранить предыдущее поведение, удалите в DateTimeModelBinderProvider Startup.ConfigureServices:

services.AddControllersWithViews(options =>
    options.ModelBinderProviders.RemoveType<DateTimeModelBinderProvider>());

ComplexObjectModelBinderProvider \ ComplexObjectModelBinder заменять ComplexTypeModelBinderProvider \ ComplexTypeModelBinder

Чтобы добавить поддержку типов записей C# 9 для привязки модели, этоComplexTypeModelBinderProvider:

  • Аннотированный как устаревший.
  • Больше не зарегистрировано по умолчанию.

Приложения, использующие наличие ComplexTypeModelBinderProvider в ModelBinderProviders коллекции, должны ссылаться на новый поставщик привязки:

- var complexModelBinderProvider = options.ModelBinderProviders.OfType<ComplexTypeModelBinderProvider>();
+ var complexModelBinderProvider = options.ModelBinderProviders.OfType<ComplexObjectModelBinderProvider>();

UseDatabaseErrorPage устаревший

Шаблоны ASP.NET Core 3.1, которые включают параметр для отдельных учетных записей пользователей, создают вызов UseDatabaseErrorPage. UseDatabaseErrorPage теперь устарело и должно быть заменено сочетанием AddDatabaseDeveloperPageExceptionFilter и UseMigrationsEndPoint, как показано в следующем коде:

public void ConfigureServices(IServiceCollection services)
{
    services.AddDbContext<ApplicationDbContext>(options =>
        options.UseSqlServer(
            Configuration.GetConnectionString("DefaultConnection")));
+   services.AddDatabaseDeveloperPageExceptionFilter();
    services.AddDefaultIdentity<IdentityUser>(options => options.SignIn.RequireConfirmedAccount = true)
        .AddEntityFrameworkStores<ApplicationDbContext>();
    services.AddRazorPages();
}

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
    if (env.IsDevelopment())
    {
        app.UseDeveloperExceptionPage();
+       app.UseMigrationsEndPoint();
-       app.UseDatabaseErrorPage();
    }
    else
    {
        app.UseExceptionHandler("/Error");
        app.UseHsts();
    }

Дополнительные сведения см. в статье Обсоляние по промежуточного слоя DatabaseErrorPage (dotnet/aspnetcore #24987).

модуль ASP.NET Core (ANCM)

Если модуль ASP.NET Core (ANCM) не был выбранным компонентом при установке Visual Studio или если в системе установлена предварительная версия ANCM, скачайте последнюю версию установщика пакета размещения .NET Core (прямая загрузка) и запустите установщик. Дополнительные сведения см. в разделе "Пакет размещения".

Изменение имени приложения

В .NET 6 WebApplicationBuilder нормализует корневой путь содержимого, чтобы завершиться с DirectorySeparatorCharпомощью . Большинство приложений, перенесенных из HostBuilder или WebHostBuilder не имеющих того же имени приложения, так как они не нормализованы. Дополнительные сведения см. в разделе SetApplicationName

Просмотр критических изменений

См. следующие ресурсы.