Переход с ASP.NET Core 3.1 на 5.0
В этой статье объясняется, как обновить существующий проект ASP.NET Core 3.1 до ASP.NET Core 5.0. Инструкции по миграции с ASP.NET Core 3.1 на ASP.NET Core 6.0 см. в разделе "Миграция с ASP.NET Core 3.1 на 6.0".
Необходимые компоненты
- Visual Studio 2019 16.8 или более поздней версии с рабочей нагрузкой ASP.NET и разработка веб-приложений
- Пакет SDK для .NET 5.0
Обновление версии пакета SDK для .NET Core в global.json
Если вы используете global.json файл для конкретной версии пакета SDK для .NET Core, обновите version
свойство до установленной версии пакета SDK для .NET 5.0. Например:
{
"sdk": {
- "version": "3.1.200"
+ "version": "5.0.100"
}
}
Обновление целевой платформы
При обновлении Blazor WebAssembly проекта перейдите к разделу "Обновить Blazor WebAssembly проекты ". Для любого другого типа проекта ASP.NET Core обновите moniker целевой платформы проекта (TFM) файл проекта следующим net5.0
образом:
<Project Sdk="Microsoft.NET.Sdk.Web">
<PropertyGroup>
- <TargetFramework>netcoreapp3.1</TargetFramework>
+ <TargetFramework>net5.0</TargetFramework>
</PropertyGroup>
</Project>
Удаление bin
и obj
папки
Возможно, потребуется удалить bin
папки и obj
папки. Выполните команду dotnet nuget locals --clear all
, чтобы очистить кэш пакетов NuGet.
Blazor Изменения логики маршрутизации приложений в выпусках 5.0.1 и более 5.x до 6.0
Вычисление приоритета маршрута изменилось в выпуске исправлений ASP.NET Core 5.0.1. Это может повлиять на вас, если вы определили маршруты catch-all или маршруты с необязательными параметрами.
Старое поведение
При предыдущем поведении в ASP.NET Core 5.0.0 или более ранней версии маршруты с более низким приоритетом, например, сопоставляются перед маршрутами с более высоким приоритетом, например{*slug}
/customer/{id}
.
Новое поведение
Новое поведение в ASP.NET Core 5.0.1 или более поздней версии тесно соответствует поведению маршрутизации, определенному в приложениях ASP.NET Core, где платформа вычисляет и устанавливает приоритет маршрута для каждого сегмента в первую очередь и использует только длину маршрута для разрыва связей в качестве дополнительных критериев.
Причина изменения
Исходное поведение считается ошибкой в реализации, так как наша цель заключается Blazor в том, чтобы система маршрутизации работала так же, как и система маршрутизации ASP.NET Core для подмножества функций, поддерживаемых Blazor маршрутизацией.
Рекомендуемое действие
PreferExactMatches
Добавьте атрибут в Router
компонент в App.razor
файле, чтобы выбрать правильное поведение:
<Router AppAssembly="@typeof(Program).Assembly" PreferExactMatches="@true">
Если PreferExactMatches
имеет значение @true
, то при сопоставлении маршрутов предпочтение отдается точным совпадениям, а не подстановочным знакам.
Внимание
Все приложения должны явно задать значение PreferExactMatches
@true
.
Возможность установить PreferExactMatches
@false
или оставить ее неустановленной предоставляется только для обратной совместимости.
При выпуске .NET 6 маршрутизатор всегда предпочитает точные совпадения, и PreferExactMatches
параметр не будет доступен.
Обновление Blazor WebAssembly и Blazor Server проекты
Рекомендации, приведенные в этом разделе, относятся к обеим Blazor моделям размещения. В разделах ниже этого раздела приведены дополнительные рекомендации, относящиеся к моделям размещения и типам приложений. Примените инструкции из всех соответствующих разделов к приложению.
Blazor WebAssembly В
wwwroot/index.html
приложении илиPages/_Host.cshtml
Blazor Server приложении добавьте<link>
элемент в<head>
элемент для стилей. В следующих<link>
значениях атрибутов элементаhref
заполнитель{ASSEMBLY NAME}
— это имя сборки приложения.+<link href="{ASSEMBLY NAME}.styles.css" rel="stylesheet" />
Автономный Blazor WebAssembly или Blazor Server пример:
+<link href="BlazorSample.styles.css" rel="stylesheet" />
Client
проект размещенного Blazor WebAssembly решения:+<link href="BlazorSample.Client.styles.css" rel="stylesheet" />
Включите новое пространство имен в файл приложения
_Imports.razor
для виртуализации компонентов. Microsoft.AspNetCore.Components.Web.Virtualization В следующих_Imports.razor
файлах показаны пространства имен по умолчанию в приложениях, созданных на основе Blazor шаблонов проектов. Заполнитель{ASSEMBLY NAME}
— это имя сборки приложения.Blazor WebAssembly (
_Imports.razor
):@using System.Net.Http @using System.Net.Http.Json @using Microsoft.AspNetCore.Components.Forms @using Microsoft.AspNetCore.Components.Routing @using Microsoft.AspNetCore.Components.Web @using Microsoft.AspNetCore.Components.Web.Virtualization @using Microsoft.AspNetCore.Components.WebAssembly.Http @using Microsoft.JSInterop @using {ASSEMBLY NAME} @using {ASSEMBLY NAME}.Shared
Blazor Server (
_Imports.razor
):@using System.Net.Http @using Microsoft.AspNetCore.Authorization @using Microsoft.AspNetCore.Components.Authorization @using Microsoft.AspNetCore.Components.Forms @using Microsoft.AspNetCore.Components.Routing @using Microsoft.AspNetCore.Components.Web @using Microsoft.AspNetCore.Components.Web.Virtualization @using Microsoft.JSInterop @using {ASSEMBLY NAME} @using {ASSEMBLY NAME}.Shared
MainLayout
В компоненте (Shared/MainLayout.razor
) окружите разметку HTML компонента элементом<div>
с атрибутом, заданнымclass
дляpage
следующих элементов:<div class="page"> ... </div>
Добавьте в папку
Shared
следующие файлы:MainLayout.razor.css
:.page { position: relative; display: flex; flex-direction: column; } .main { flex: 1; } .sidebar { background-image: linear-gradient(180deg, rgb(5, 39, 103) 0%, #3a0647 70%); } .top-row { background-color: #f7f7f7; border-bottom: 1px solid #d6d5d5; justify-content: flex-end; height: 3.5rem; display: flex; align-items: center; } .top-row ::deep a, .top-row .btn-link { white-space: nowrap; margin-left: 1.5rem; } .top-row a:first-child { overflow: hidden; text-overflow: ellipsis; } @media (max-width: 767.98px) { .top-row:not(.auth) { display: none; } .top-row.auth { justify-content: space-between; } .top-row a, .top-row .btn-link { margin-left: 0; } } @media (min-width: 768px) { .page { flex-direction: row; } .sidebar { width: 250px; height: 100vh; position: sticky; top: 0; } .top-row { position: sticky; top: 0; z-index: 1; } .main > div { padding-left: 2rem !important; padding-right: 1.5rem !important; } }
NavMenu.razor.css
:.navbar-toggler { background-color: rgba(255, 255, 255, 0.1); } .top-row { height: 3.5rem; background-color: rgba(0,0,0,0.4); } .navbar-brand { font-size: 1.1rem; } .oi { width: 2rem; font-size: 1.1rem; vertical-align: text-top; top: -2px; } .nav-item { font-size: 0.9rem; padding-bottom: 0.5rem; } .nav-item:first-of-type { padding-top: 1rem; } .nav-item:last-of-type { padding-bottom: 1rem; } .nav-item ::deep a { color: #d7d7d7; border-radius: 4px; height: 3rem; display: flex; align-items: center; line-height: 3rem; } .nav-item ::deep a.active { background-color: rgba(255,255,255,0.25); color: white; } .nav-item ::deep a:hover { background-color: rgba(255,255,255,0.1); color: white; } @media (min-width: 768px) { .navbar-toggler { display: none; } .collapse { /* Never collapse the sidebar for wide screens */ display: block; } }
Последний базовый
wwwroot/css/app.css
Blazor WebAssembly файл приложения илиwwwroot/css/site.css
файла Blazor Server приложения включает следующие стили. Удалите дополнительные стили, оставляя следующие стили и все, что вы добавили в приложение.Следующая таблица стилей включает только базовые стили и не включает пользовательские стили, добавленные разработчиком:
html, body { font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; } a, .btn-link { color: #0366d6; } .btn-primary { color: #fff; background-color: #1b6ec2; border-color: #1861ac; } .content { padding-top: 1.1rem; } .valid.modified:not([type=checkbox]) { outline: 1px solid #26b050; } .invalid { outline: 1px solid red; } .validation-message { color: red; } #blazor-error-ui { background: lightyellow; bottom: 0; box-shadow: 0 -1px 2px rgba(0, 0, 0, 0.2); display: none; left: 0; padding: 0.6rem 1.25rem 0.7rem 1.25rem; position: fixed; width: 100%; z-index: 1000; } #blazor-error-ui .dismiss { cursor: pointer; position: absolute; right: 0.75rem; top: 0.5rem; }
Примечание.
В приведенном выше примере директива
@import
для значков Open Iconic (open-iconic-bootstrap.css
), предоставляемых шаблоном Blazor проекта, не отображается. Открытый знак был заброшен своими обслуживателями.
Обновление проектов Blazor WebAssembly
Следуйте указаниям, приведенным в предыдущем разделе "Обновление Blazor WebAssembly и Blazor Server проекты ".
Blazor WebAssembly Для проекта, включая Client
проект размещенного Blazor решения, примените следующие изменения к файлу проекта:
Обновление пакета SDK до
Microsoft.NET.Sdk.Web
Microsoft.NET.Sdk.BlazorWebAssembly
:- <Project Sdk="Microsoft.NET.Sdk.Web"> + <Project Sdk="Microsoft.NET.Sdk.BlazorWebAssembly">
Примечание.
Это обновление применяется только к автономным Blazor WebAssembly проектам и
Client
проектам размещенных Blazor решений.Обновите следующие свойства:
<Project Sdk="Microsoft.NET.Sdk.BlazorWebAssembly"> <PropertyGroup> - <TargetFramework>netstandard2.1</TargetFramework> - <RazorLangVersion>3.0</RazorLangVersion> + <TargetFramework>net5.0</TargetFramework> </PropertyGroup>
Удалите ссылку на пакет microsoft.AspNetCore.Components.WebAssembly.Build:
<ItemGroup> - <PackageReference Include="Microsoft.AspNetCore.Components.WebAssembly.Build" Version="3.2.1" PrivateAssets="all" />
Обновите другие пакеты до последних версий. Последние версии можно найти на NuGet.org.
В
wwwroot/index.html
поле<div>/> измените элемент, который загружает App
компонент в элемент с наборомid
app
:-<app>Loading...</app> +<div id="app">Loading...</div>
В
Program.Main
(Program.cs
) измените ссылку на<app>
элемент на селектор CSS, добавив хэш#
в него:-builder.RootComponents.Add<App>("app"); +builder.RootComponents.Add<App>("#app");
В
Program.Main
(Program.cs
) измените временнуюHttpClient
регистрацию по умолчанию на область действия, если она присутствует:-builder.Services.AddTransient(sp => new HttpClient - { BaseAddress = new Uri(builder.HostEnvironment.BaseAddress) }); +builder.Services.AddScoped(sp => new HttpClient + { BaseAddress = new Uri(builder.HostEnvironment.BaseAddress) });
В
Program.Main
(Program.cs
)Client
приложения размещенных Blazor решений:- При необходимости замените
builder.HostEnvironment.BaseAddress
строковые базовые адреса клиента. - Измените все именованные временные регистрации фабрики клиентов на область действия.
-builder.Services.AddHttpClient("{APP NAMESPACE}.ServerAPI", - client => client.BaseAddress = new Uri("https://localhost:5001")) - .AddHttpMessageHandler<BaseAddressAuthorizationMessageHandler>(); -builder.Services.AddTransient(sp => sp.GetRequiredService<IHttpClientFactory>() - .CreateClient("{APP NAMESPACE}.ServerAPI")); +builder.Services.AddHttpClient("{APP NAMESPACE}.ServerAPI", + client => client.BaseAddress = new Uri(builder.HostEnvironment.BaseAddress)) + .AddHttpMessageHandler<BaseAddressAuthorizationMessageHandler>(); +builder.Services.AddScoped(sp => sp.GetRequiredService<IHttpClientFactory>() + .CreateClient("{APP NAMESPACE}.ServerAPI"));
В приведенном выше коде
{APP NAMESPACE}
заполнитель — это пространство имен приложения.- При необходимости замените
Автономное Blazor WebAssembly приложение с учетными записями Майкрософт
Следуйте инструкциям, приведенным в предыдущих разделах "Обновление Blazor WebAssembly и проекты" и Blazor Server "Обновить Blazor WebAssembly проекты".
Для автономного Blazor WebAssembly приложения, зарегистрированного в портал Azure для использования идентификатора Microsoft Entra (ME-ID) для учетных записей Майкрософт:
Приложению
openid
требуются области иoffline_access
области:options.ProviderOptions.DefaultAccessTokenScopes.Add("openid"); options.ProviderOptions.DefaultAccessTokenScopes.Add("offline_access");
В колонке проверки подлинности регистрации приложения портал Azure:
- Удалите конфигурацию веб-платформы .
- Добавьте конфигурацию платформы одностраничных приложений с URI перенаправления приложения.
- Отключите неявное предоставление маркеров доступа и маркеров идентификатора.
Дополнительные сведения см. в статье "Защита автономного приложения ASP.NET Core Blazor WebAssembly с помощью учетных записей Майкрософт".
Автономное Blazor WebAssembly приложение с идентификатором Microsoft Entra (ME-ID)
Следуйте инструкциям, приведенным в предыдущих разделах "Обновление Blazor WebAssembly и проекты" и Blazor Server "Обновить Blazor WebAssembly проекты".
Для автономного Blazor WebAssembly приложения, зарегистрированного в портал Azure для использования идентификатора Microsoft Entra (ME-ID):
Приложению требуется
https://graph.microsoft.com/User.Read
область:options.ProviderOptions.DefaultAccessTokenScopes .Add("https://graph.microsoft.com/User.Read");
В колонке проверки подлинности регистрации приложения портал Azure:
- Удалите конфигурацию веб-платформы .
- Добавьте конфигурацию платформы одностраничных приложений с URI перенаправления приложения.
- Отключите неявное предоставление маркеров доступа и маркеров идентификатора.
Дополнительные сведения см. в статье "Защита автономного приложения ASP.NET Core Blazor WebAssembly с помощью идентификатора Microsoft Entra.
Автономное Blazor WebAssembly приложение с Azure Active Directory (AAD) B2C
Следуйте инструкциям, приведенным в предыдущих разделах "Обновление Blazor WebAssembly и проекты" и Blazor Server "Обновить Blazor WebAssembly проекты".
Для автономного Blazor WebAssembly приложения, зарегистрированного в портал Azure для использования Azure Active Directory (AAD) B2C:
Приложению
openid
требуются области иoffline_access
области:options.ProviderOptions.DefaultAccessTokenScopes.Add("openid"); options.ProviderOptions.DefaultAccessTokenScopes.Add("offline_access");
В колонке проверки подлинности регистрации приложения портал Azure:
- Удалите конфигурацию веб-платформы .
- Добавьте конфигурацию платформы одностраничных приложений с URI перенаправления приложения.
- Отключите неявное предоставление маркеров доступа и маркеров идентификатора.
Дополнительные сведения см. в статье "Защита автономного приложения ASP.NET Core Blazor WebAssembly с помощью Azure Active Directory B2C".
Размещенное Blazor WebAssembly приложение с идентификатором Microsoft Entra (ME-ID) или AAD B2C
Следуйте инструкциям, приведенным в предыдущих разделах "Обновление Blazor WebAssembly и проекты" и Blazor Server "Обновить Blazor WebAssembly проекты".
Регистрация Client
размещенного Blazor решения, использующего AAD или AAD B2C для проверки подлинности пользователей, должна использовать конфигурацию платформы приложение Azure одностраничных приложений.
В колонке проверки подлинности регистрации приложения портал AzureClient
:
- Удалите конфигурацию веб-платформы .
- Добавьте конфигурацию платформы одностраничных приложений с URI перенаправления приложения.
- Отключите неявное предоставление маркеров доступа и маркеров идентификатора.
Дополнительные сведения см. в разделе:
- Защита размещенного приложения ASP.NET Core Blazor WebAssembly с помощью идентификатора Microsoft Entra
- Защита размещенных приложений ASP.NET Core Blazor WebAssembly с помощью Azure Active Directory B2C
Обновление проекта сервера размещенного Blazor решения
Следуйте инструкциям в предыдущих разделах:
- Обновление Blazor WebAssembly и Blazor Server проекты
- Обновление Blazor WebAssembly проектов
- Раздел, применимый к поставщику приложения с Azure Active Directory:
Server
Обновите проект размещенного Blazor решения в качестве приложения ASP.NET Core, следуя общим рекомендациям в этой статье.
Кроме того, проекты, Server
которые проходят проверку подлинности пользователей в клиентских Blazor WebAssembly приложениях с помощью идентификатора Microsoft Entra (ME-ID) или B2C, должны принимать новые пакеты Microsoft Identity версии 2.0:
Для AAD:
-<PackageReference Include="Microsoft.AspNetCore.Authentication.AzureAD.UI" Version="..." />
+<PackageReference Include="Microsoft.Identity.Web" Version="{VERSION}" />
+<PackageReference Include="Microsoft.Identity.Web.UI" Version="{VERSION}" />
Для AAD B2C:
-<PackageReference Include="Microsoft.AspNetCore.Authentication.AzureADB2C.UI" Version="..." />
+<PackageReference Include="Microsoft.Identity.Web" Version="{VERSION}" />
+<PackageReference Include="Microsoft.Identity.Web.UI" Version="{VERSION}" />
Для предыдущих ссылок на пакет определите версии пакетов для {VERSION}
заполнителей на NuGet.org:
Примечание.
Пакет SDK Server
проекта в размещенном Blazor WebAssembly решении остается Microsoft.NET.Sdk.Web
следующим:
<Project Sdk="Microsoft.NET.Sdk.Web">
Дополнительные сведения см. в разделе:
- Защита размещенного приложения ASP.NET Core Blazor WebAssembly с помощью идентификатора Microsoft Entra
- Защита размещенных приложений ASP.NET Core Blazor WebAssembly с помощью Azure Active Directory B2C
Очистка и перестроение решения
После переноса приложения или решения в .NET 5 очистите и перестроите приложение или решение. Если несовместимость пакета существует между новыми ссылками на пакеты и кэшируемыми пакетами:
Снимите кэши пакетов NuGet, выполнив следующую
dotnet nuget locals
команду в командной оболочке:dotnet nuget locals --clear all
Очистка и перестроение приложения или решения.
Устранение неполадок
Следуйте инструкциям по устранению неполадок в конце Blazor WebAssembly раздела безопасности, который применяется к приложению:
Автономные приложения Blazor WebAssembly:
- Общие рекомендации по использованию поставщиков OIDC и библиотеки проверки подлинности WebAssembly
- Учетные записи Майкрософт
- Идентификатор Microsoft Entra (ME-ID)
- Azure Active Directory (AAD) B2C
Размещенные приложения Blazor WebAssembly:
Несанкционированный клиент для идентификатора Microsoft Entra (ME-ID)
После обновления Blazor WebAssembly приложения, использующего AAD для проверки подлинности, вы можете получить следующую ошибку при обратном вызове входа в приложение после входа пользователя в AAD:
info: сбой авторизации Microsoft.AspNetCore.Authorization.DefaultAuthorizationService[2]. Эти требования не выполнены: DenyAnonymousAuthorizationRequirement: требуется прошедший проверку подлинности пользователь.
Ошибка обратного вызова входа от AAD:
- Ошибка:
unauthorized_client
- Описание:
AADB2C90058: The provided application is not configured to allow public clients.
Чтобы устранить эту ошибку, сделайте следующее:
- На портале Azure перейдите к манифесту приложения.
- Задайте для атрибута
allowPublicClient
значениеnull
илиtrue
.
Обновление прогрессивного Blazor веб-приложения (PWA)
Добавьте следующий элемент в файл проекта приложения PWA:
<ItemGroup>
<ServiceWorker Include="wwwroot\service-worker.js"
PublishedContent="wwwroot\service-worker.published.js" />
</ItemGroup>
Удаление ссылки на таблицу стилей изоляции CSS для предварительной версии
Если проект wwwroot/index.html
содержитBlazor WebAssemblyBlazor ServerPages/_Host.cshtml
элемент таблицы <link>
стилей для scoped.styles.css
предыдущего выпуска версии 5.0, удалите <link>
тег:
-<link href="_framework/scoped.styles.css/" rel="stylesheet" />
Обновление Razor библиотек классов (RCLs)
Перенос Razor библиотек классов (RCLs) для использования новых API или функций, представленных в рамках ASP.NET Core 5.0.
Чтобы обновить RCL, предназначенный для компонентов, выполните следующие действия.
Обновите следующие свойства в файле проекта:
<Project Sdk="Microsoft.NET.Sdk.Razor"> <PropertyGroup> - <TargetFramework>netstandard2.0</TargetFramework> - <RazorLangVersion>3.0</RazorLangVersion> + <TargetFramework>net5.0</TargetFramework> </PropertyGroup>
Обновите другие пакеты до последних версий. Последние версии можно найти на NuGet.org.
Чтобы обновить RCL для MVC, обновите следующие свойства в файле проекта:
<Project Sdk="Microsoft.NET.Sdk.Razor">
<PropertyGroup>
- <TargetFramework>netcoreapp3.1</TargetFramework>
+ <TargetFramework>net5.0</TargetFramework>
<AddRazorSupportForMvc>true</AddRazorSupportForMvc>
</PropertyGroup>
Обновление ссылок на пакеты
В файле проекта обновите каждый атрибут пакета Microsoft.AspNetCore.*, Microsoft.EntityFrameworkCore.*, Microsoft.Extensions.*и справочник по Version
пакету System.Net.Http.Json до 5.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="5.0.0" />
+ <PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="5.0.0">
+ <PackageReference Include="Microsoft.Extensions.Caching.Abstractions" Version="5.0.0" />
+ <PackageReference Include="System.Net.Http.Json" Version="5.0.0" />
</ItemGroup>
Обновление образов Docker
Для приложений с помощью Docker обновите инструкции и скрипты DockerfileFROM
. Используйте базовый образ, включающий среду выполнения ASP.NET Core 5.0. Рассмотрим следующее docker pull
различие между ASP.NET Core 3.1 и 5.0:
- docker pull mcr.microsoft.com/dotnet/core/aspnet:3.1
+ docker pull mcr.microsoft.com/dotnet/aspnet:5.0
В рамках перехода на .NET в качестве имени продукта образы Docker перемещаются из mcr.microsoft.com/dotnet/core
репозиториев mcr.microsoft.com/dotnet
в . Дополнительные сведения см. в разделе 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();
}
Дополнительные сведения см. здесь на GitHub.
модуль ASP.NET Core (ANCM)
Если модуль ASP.NET Core (ANCM) не был выбранным компонентом при установке Visual Studio или если в системе установлена предварительная версия ANCM, скачайте последнюю версию установщика пакета размещения .NET Core (прямая загрузка) и запустите установщик. Дополнительные сведения см. в разделе "Пакет размещения".
Изменения ссылок на пакеты, затрагивающие некоторые пакеты NuGet
При миграции некоторых Microsoft.Extensions.*
пакетов NuGet из репозитория dotnet/extensions в dotnet/runtime, как описано в разделе "Перенос содержимого dotnet/extensions в dotnet/runtime и dotnet/aspnetcore"(aspnet/Announcements #411), изменения упаковки применяются к некоторым перенесенным пакетам. Эти изменения часто приводят к изменениям пространства имен для API .NET.
Для дальнейшего изучения API для изменения пространства имен приложений при миграции на 5.0 используйте браузер API .NET.
Миграция Microsoft.Identity. Паутина
На следующих вики-страницах объясняется, как перенести Microsoft.Identity. Веб-сайт от ASP.NET Core 3.1 до 5.0:
В следующих руководствах также описана миграция:
- Пользователи ASP.NET Core Web App, выполняющего вход с помощью платформы Майкрософт identity в вашей организации. См . вариант 2. Создание примера из командной строки.
- Войдите пользователя с помощью платформы Майкрософт identity в классическом приложении WPF и вызовите веб-API ASP.NET Core. Узнайте , как был создан код.
Просмотр критических изменений
Критические изменения из .NET Core 3.1 в .NET 5.0 см. в разделе "Критические изменения" для миграции с версии 3.1 на 5.0. ASP.NET Core и Entity Framework Core также включены в список.
ASP.NET Core