Migración de ASP.NET Core 3.1 a 5.0
En este artículo se explica cómo actualizar un proyecto de ASP.NET Core 3.1 existente a ASP.NET Core 5.0. Para obtener instrucciones sobre cómo migrar de ASP.NET Core 3.1 a ASP.NET Core 6.0, consulte Migración de ASP.NET Core 3.1 a 6.0.
Requisitos previos
- Versión 16.8 o posterior de Visual Studio 2019 con la carga de trabajo Desarrollo web y ASP.NET
- SDK de .NET 5.0
Actualización de la versión del SDK de .NET Core en global.json
Si confía en que un archivo global.json se dirija a una versión específica del SDK de .NET Core, actualice la propiedad version
a la versión del .NET SDK 5.0 instalada. Por ejemplo:
{
"sdk": {
- "version": "3.1.200"
+ "version": "5.0.100"
}
}
Actualización de la plataforma de destino
Si actualiza un Blazor WebAssembly proyecto, vaya a la sección Actualizar Blazor WebAssembly proyectos . Para cualquier otro tipo de proyecto de ASP.NET Core, actualice el moniker de la plataforma de destino (TFM) del archivo de proyecto a net5.0
:
<Project Sdk="Microsoft.NET.Sdk.Web">
<PropertyGroup>
- <TargetFramework>netcoreapp3.1</TargetFramework>
+ <TargetFramework>net5.0</TargetFramework>
</PropertyGroup>
</Project>
Eliminar las carpetas bin
y obj
Es posible que tenga que eliminar las carpetas bin
y obj
. Ejecute dotnet nuget locals --clear all
para borrar la memoria caché del paquete NuGet.
Cambios en la Blazor lógica de enrutamiento de aplicaciones en la versión 5.0.1 y versiones posteriores de 5.x hasta 6.0
El cálculo de la prioridad de ruta cambió en la versión de revisión de ASP.NET Core 5.0.1. Esto puede afectarle si ha definido rutas de captura o rutas con parámetros opcionales.
Comportamiento anterior
Con el comportamiento anterior en ASP.NET Core 5.0.0 o versiones anteriores, las rutas con prioridad inferior, como {*slug}
, se hacen coincidir antes de que las rutas tengan mayor prioridad, como /customer/{id}
.
Comportamiento nuevo
El nuevo comportamiento de ASP.NET Core 5.0.1 o posterior coincide más estrechamente con el comportamiento de enrutamiento definido en ASP.NET Core aplicaciones, donde el marco procesa y establece primero la prioridad de ruta para cada segmento y solo usa la longitud de la ruta para romper los vínculos como criterios secundarios.
Motivo del cambio
El comportamiento original se considera un error en la implementación porque nuestro objetivo es que el Blazor sistema de enrutamiento se comporte de la misma manera que el sistema de enrutamiento ASP.NET Core para el subconjunto de características admitidas por Blazor el enrutamiento.
Acción recomendada
Agregue el PreferExactMatches
atributo al Router
componente del App.razor
archivo para participar en el comportamiento correcto:
<Router AppAssembly="@typeof(Program).Assembly" PreferExactMatches="@true">
Cuando PreferExactMatches
se establece en @true
, la coincidencia de rutas prefiere las coincidencias exactas a los caracteres comodín.
Importante
Todas las aplicaciones deben establecer PreferExactMatches
explícitamente en @true
.
La capacidad de establecerPreferExactMatches
en@false
o dejarla sin establecer solo se proporciona para la compatibilidad con versiones anteriores.
Cuando se publique .NET 6, el enrutador preferirá siempre las coincidencias exactas, y la PreferExactMatches
opción no estará disponible.
Actualización Blazor WebAssembly y Blazor Server proyectos
Las instrucciones de esta sección se aplican a ambos Blazor modelos de hospedaje. En las secciones siguientes a esta sección se proporcionan instrucciones adicionales específicas para hospedar modelos y tipos de aplicaciones. Aplique las guías de todas las secciones pertinentes a la aplicación.
En
wwwroot/index.html
de una Blazor WebAssembly aplicación oPages/_Host.cshtml
de una Blazor Server aplicación, agregue un<link>
elemento al<head>
elemento para los estilos. En los siguientes<link>
valores de atributo de elementohref
, el marcador de posición{ASSEMBLY NAME}
es el nombre del ensamblado de la aplicación.+<link href="{ASSEMBLY NAME}.styles.css" rel="stylesheet" />
Independiente Blazor WebAssembly o Blazor Server ejemplo:
+<link href="BlazorSample.styles.css" rel="stylesheet" />
Client
proyecto de un ejemplo Blazor WebAssembly de solución alojada:+<link href="BlazorSample.Client.styles.css" rel="stylesheet" />
Incluya un nuevo espacio de nombres en el
_Imports.razor
archivo de la aplicación para la virtualización de componentes, Microsoft.AspNetCore.Components.Web.Virtualization. Los siguientes_Imports.razor
archivos muestran los espacios de nombres predeterminados en las aplicaciones generadas a partir de las plantillas de Blazor proyecto. El marcador de posición{ASSEMBLY NAME}
es el nombre de ensamblado de la aplicación.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
En el
MainLayout
componente (Shared/MainLayout.razor
), rodea el marcado HTML del componente con un<div>
elemento que tiene unclass
atributo establecido enpage
:<div class="page"> ... </div>
Añade los siguientes archivos a la
Shared
carpeta: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; } }
El archivo base
wwwroot/css/app.css
más reciente de una Blazor WebAssembly aplicación owwwroot/css/site.css
archivo de una Blazor Server aplicación incluye los siguientes estilos. Elimine los estilos adicionales dejando los siguientes estilos y cualquiera que haya añadido a la aplicación.La hoja de estilos siguiente solo incluye estilos base y no incluye estilos personalizados agregados por el desarrollador:
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; }
Nota:
En el ejemplo anterior no se muestra la
@import
directiva para iconos de Open Iconic (open-iconic-bootstrap.css
), proporcionada por la Blazor plantilla de proyecto. Open Iconic fue abandonado por sus mantenedores.
Actualización de proyectos de Blazor WebAssembly
Siga las instrucciones de la sección Actualización Blazor WebAssembly y Blazor Server proyectos anteriores.
Para un Blazor WebAssembly proyecto, incluido el Client
proyecto de una solución hospedada Blazor , aplique los siguientes cambios en el archivo de proyecto:
Actualice el SDK de
Microsoft.NET.Sdk.Web
aMicrosoft.NET.Sdk.BlazorWebAssembly
:- <Project Sdk="Microsoft.NET.Sdk.Web"> + <Project Sdk="Microsoft.NET.Sdk.BlazorWebAssembly">
Nota:
Esta actualización solo se aplica a proyectos independientes Blazor WebAssembly y a los
Client
proyectos de soluciones hospedadas Blazor .Actualice las siguientes propiedades:
<Project Sdk="Microsoft.NET.Sdk.BlazorWebAssembly"> <PropertyGroup> - <TargetFramework>netstandard2.1</TargetFramework> - <RazorLangVersion>3.0</RazorLangVersion> + <TargetFramework>net5.0</TargetFramework> </PropertyGroup>
Quite la referencia del paquete a Microsoft.AspNetCore.Components.WebAssembly.Build:
<ItemGroup> - <PackageReference Include="Microsoft.AspNetCore.Components.WebAssembly.Build" Version="3.2.1" PrivateAssets="all" />
Actualice otros paquetes a sus versiones más recientes. Las versiones más recientes se pueden encontrar en NuGet.org.
En
wwwroot/index.html
, cambie el elemento que carga elApp
componente en un<div>
elemento con unid
establecido enapp
:-<app>Loading...</app> +<div id="app">Loading...</div>
En
Program.Main
(Program.cs
), cambie la referencia al<app>
elemento a un selector CSS agregando un hash#
a él:-builder.RootComponents.Add<App>("app"); +builder.RootComponents.Add<App>("#app");
En
Program.Main
(Program.cs
), cambie un registro transitorioHttpClient
predeterminado a con ámbito, si está presente:-builder.Services.AddTransient(sp => new HttpClient - { BaseAddress = new Uri(builder.HostEnvironment.BaseAddress) }); +builder.Services.AddScoped(sp => new HttpClient + { BaseAddress = new Uri(builder.HostEnvironment.BaseAddress) });
En
Program.Main
(Program.cs
) de laClient
aplicación de soluciones hospedadas Blazor :- Opcionalmente, sustituya
builder.HostEnvironment.BaseAddress
las direcciones base de cliente de cadena. - Cambie los registros de fábrica de cliente transitorios con nombre a con ámbito.
-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"));
En el código anterior, el marcador de posición
{APP NAMESPACE}
es el nombre de espacio de la aplicación.- Opcionalmente, sustituya
Aplicación independiente Blazor WebAssembly con Cuentas de Microsoft
Siga las orientaciones de las secciones anteriores Actualizar Blazor WebAssembly y Blazor Server proyectos y Actualizar Blazor WebAssembly proyectos .
Para que una aplicación independiente Blazor WebAssembly registrada en Azure Portal use microsoft Entra ID (ME-ID) para cuentas Microsoft:
La aplicación requiere los
openid
yoffline_access
ámbitos :options.ProviderOptions.DefaultAccessTokenScopes.Add("openid"); options.ProviderOptions.DefaultAccessTokenScopes.Add("offline_access");
En la hoja de Autenticación de registro de aplicaciones del portal Azure:
- Agregue la configuración de la plataforma web.
- Agregue una configuración de plataforma de aplicaciones de página única con el URI de redireccionamiento de la aplicación.
- Desactivar la concesión implícita para tokens de acceso y tokens de ID.
Para más información, consulte Protección de una aplicación ASP.NET Core Blazor WebAssembly independiente con Cuentas de Microsoft.
Aplicación independiente Blazor WebAssembly con el identificador de Entra de Microsoft (ME-ID)
Siga las orientaciones de las secciones anteriores Actualizar Blazor WebAssembly y Blazor Server proyectos y Actualizar Blazor WebAssembly proyectos .
Para que una aplicación independiente Blazor WebAssembly registrada en Azure Portal use el identificador de Microsoft Entra (ME-ID):
La aplicación requiere el
https://graph.microsoft.com/User.Read
ámbito:options.ProviderOptions.DefaultAccessTokenScopes .Add("https://graph.microsoft.com/User.Read");
En la hoja de Autenticación de registro de aplicaciones del portal Azure:
- Agregue la configuración de la plataforma web.
- Agregue una configuración de plataforma de aplicaciones de página única con el URI de redireccionamiento de la aplicación.
- Desactivar la concesión implícita para tokens de acceso y tokens de ID.
Para más información, consulte Protección de una aplicación ASP.NET Core Blazor WebAssembly independiente con Cuentas de Microsoft.
Aplicación Blazor WebAssembly independiente con Azure Active Directory B2C (AAD)
Siga las orientaciones de las secciones anteriores Actualizar Blazor WebAssembly y Blazor Server proyectos y Actualizar Blazor WebAssembly proyectos .
Para que una aplicación independiente Blazor WebAssembly registrada en el Azure Portal use Azure Active Directory (AAD) B2C:
La aplicación requiere los
openid
yoffline_access
ámbitos :options.ProviderOptions.DefaultAccessTokenScopes.Add("openid"); options.ProviderOptions.DefaultAccessTokenScopes.Add("offline_access");
En la hoja de Autenticación de registro de aplicaciones del portal Azure:
- Agregue la configuración de la plataforma web.
- Agregue una configuración de plataforma de aplicaciones de página única con el URI de redireccionamiento de la aplicación.
- Desactivar la concesión implícita para tokens de acceso y tokens de ID.
Para más información, consulte Protección de una aplicación ASP.NET Core Blazor WebAssembly independiente con Azure Active Directory B2C.
Aplicación hospedada Blazor WebAssembly con microsoft Entra ID (ME-ID) o AAD B2C
Siga las orientaciones de las secciones anteriores Actualizar Blazor WebAssembly y Blazor Server proyectos y Actualizar Blazor WebAssembly proyectos .
El Client
registro de aplicaciones de una solución alojada Blazor que utiliza AAD o AAD B2C para la autenticación de usuarios debe utilizar una configuración de la plataforma Azure Apps de aplicación de una sola página.
En la hoja de Client
Autenticación de registro de aplicaciones del portal Azure:
- Agregue la configuración de la plataforma web.
- Agregue una configuración de plataforma de aplicaciones de página única con el URI de redireccionamiento de la aplicación.
- Desactivar la concesión implícita para tokens de acceso y tokens de ID.
Para más información, consulte:
- Protección de una aplicación hospedada ASP.NET Core Blazor WebAssembly con el identificador de Entra de Microsoft
- Protección de una aplicación hospedada Blazor WebAssembly de ASP.NET Core con Azure Active Directory B2C
Actualizar el proyecto Servidor de una solución Blazor alojada
Siga las instrucciones de las secciones anteriores:
- Actualización Blazor WebAssembly y Blazor Server proyectos
- Actualización Blazor WebAssembly de proyectos
- La sección que se aplica al proveedor de la aplicación con Azure Active Directory:
Actualice el Server
proyecto de una solución hospedada Blazor como una aplicación ASP.NET Core siguiendo las instrucciones generales de este artículo.
Además, Server
los proyectos que autentican a los usuarios en aplicaciones cliente Blazor WebAssembly con Azure Active Directory (AAD) o B2C deben adoptar nuevos paquetes de Microsoft Identity v2.0:
Para AAD:
-<PackageReference Include="Microsoft.AspNetCore.Authentication.AzureAD.UI" Version="..." />
+<PackageReference Include="Microsoft.Identity.Web" Version="{VERSION}" />
+<PackageReference Include="Microsoft.Identity.Web.UI" Version="{VERSION}" />
Para 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}" />
Para las referencias de paquete anteriores, determine las versiones del paquete para los {VERSION}
marcadores de posición en NuGet.org:
Nota:
El SDK del Server
proyecto en una solución alojada Blazor WebAssembly permaneceMicrosoft.NET.Sdk.Web
:
<Project Sdk="Microsoft.NET.Sdk.Web">
Para más información, consulte:
- Protección de una aplicación hospedada ASP.NET Core Blazor WebAssembly con el identificador de Entra de Microsoft
- Protección de una aplicación hospedada Blazor WebAssembly de ASP.NET Core con Azure Active Directory B2C
Limpiar y recompilar la solución
Después de migrar la aplicación o la solución a .NET 5, limpie y recompile la aplicación o la solución. Si existen incompatibilidades de paquetes entre las nuevas referencias de paquete y los paquetes almacenados en caché:
Borre las cachés de los paquetes NuGet ejecutando el siguiente
dotnet nuget locals
comando en un shell de comandos:dotnet nuget locals --clear all
Limpie y recompile la aplicación o la solución.
Solución de problemas
Siga las instrucciones de solución de problemas al final del Blazor WebAssembly tema de seguridad que se aplica a la aplicación:
Aplicaciones de Blazor WebAssembly independientes:
- Instrucciones generales para los proveedores de OIDC y la biblioteca de autenticación WebAssembly
- Cuentas de Microsoft
- Microsoft Entra ID (ME-ID)
- Azure Active Directory (AAD) B2C
Aplicaciones de Blazor WebAssembly hospedadas:
Cliente no autorizado para microsoft Entra ID (ME-ID)
Después de actualizar una Blazor WebAssembly aplicación que usa AAD para la autenticación, puede recibir el siguiente error en la devolución de llamada de inicio de sesión en la aplicación después de que el usuario inicie sesión con AAD:
Información: Error de autorización de Microsoft.AspNetCore.Authorization.DefaultAuthorizationService[2]. No se cumplen estos requisitos: DenyAnonymousAuthorizationRequirement: se requiere un usuario autenticado.
Error de devolución de llamada de inicio de sesión de AAD:
- Error:
unauthorized_client
- Descripción:
AADB2C90058: The provided application is not configured to allow public clients.
Para resolver el error:
- En Azure Portal, accede al manifiesto de la aplicación.
- Defina el atributo
allowPublicClient
ennull
otrue
.
Actualizar Blazor una aplicación web progresiva (PWA)
Añade el siguiente elemento al archivo de proyecto de la aplicación PWA:
<ItemGroup>
<ServiceWorker Include="wwwroot\service-worker.js"
PublishedContent="wwwroot\service-worker.published.js" />
</ItemGroup>
Quitar vínculo de hoja de estilos de aislamiento CSS de vista previa
Si el proyecto wwwroot/index.html
(Blazor WebAssembly) o Pages/_Host.cshtml
(Blazor Server) contiene un elemento de hoja <link>
de estilos de scoped.styles.css
una versión preliminar anterior de la versión preliminar 5.0, quite la <link>
etiqueta :
-<link href="_framework/scoped.styles.css/" rel="stylesheet" />
Actualizar Razor bibliotecas de clases (RCL)
Migre las bibliotecas de clases (RCL) Razor para aprovechar las nuevas API o las características que se presentan como parte de ASP.NET Core 5.0.
Para actualizar una RCL que tenga como destino los componentes:
Actualice las siguientes propiedades en el archivo del proyecto :
<Project Sdk="Microsoft.NET.Sdk.Razor"> <PropertyGroup> - <TargetFramework>netstandard2.0</TargetFramework> - <RazorLangVersion>3.0</RazorLangVersion> + <TargetFramework>net5.0</TargetFramework> </PropertyGroup>
Actualice otros paquetes a sus versiones más recientes. Las versiones más recientes se pueden encontrar en NuGet.org.
Para actualizar una instancia de RCL dirigida a MVC, actualice las siguientes propiedades en el archivo de proyecto:
<Project Sdk="Microsoft.NET.Sdk.Razor">
<PropertyGroup>
- <TargetFramework>netcoreapp3.1</TargetFramework>
+ <TargetFramework>net5.0</TargetFramework>
<AddRazorSupportForMvc>true</AddRazorSupportForMvc>
</PropertyGroup>
Actualización de las referencias del paquete
En el archivo del proyecto, actualice cada microsoft.AspNetCore.*, Microsoft.EntityFrameworkCore.*, Microsoft.Extensions.*, y el atributo de referencia del paquete System.Net.Http.JsonVersion
a la versión 5.0.0 o posterior. Por ejemplo:
<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>
Actualización de imágenes de Docker
En el caso de aplicaciones que usen Docker, actualice las instrucciones y scripts de Dockerfile FROM
. Use una imagen de base que incluya el entorno de ejecución de ASP.NET Core 5.0. Tenga en cuenta la siguiente docker pull
diferencia de comandos entre ASP.NET Core 3.1 y 5.0:
- docker pull mcr.microsoft.com/dotnet/core/aspnet:3.1
+ docker pull mcr.microsoft.com/dotnet/aspnet:5.0
Como parte del traslado a ".NET" como nombre del producto, las imágenes de Docker se movieron de los mcr.microsoft.com/dotnet/core
repositorios a mcr.microsoft.com/dotnet
. Para obtener más información, consulte dotnet/dotnet-docker#1939.
Cambios de enlace de modelos en ASP.NET Core MVC y Razor páginas
Los valores DateTime están modelados como horas UTC
En ASP.NET Core 3.1 y versiones anteriores, los valores DateTime
estaban enlazados al modelo como hora local, donde el servidor determinó la zona horaria. Los valores DateTime
se enlazaron a partir el formato de entrada (JSON) y los valores DateTimeOffset
se enlazaron como zonas horarias UTC.
En ASP.NET Core 5.0 y versiones posteriores, el enlace de modelos enlaza de forma coherente los DateTime
valores con la zona horaria UTC.
Para conservar el comportamiento anterior, quite DateTimeModelBinderProvider
en Startup.ConfigureServices
:
services.AddControllersWithViews(options =>
options.ModelBinderProviders.RemoveType<DateTimeModelBinderProvider>());
ComplexObjectModelBinderProvider \ ComplexObjectModelBinder reemplazar ComplexTypeModelBinderProvider \ ComplexTypeModelBinder
Para agregar compatibilidad con los tipos de registro C# 9 de enlace de modelos, el ComplexTypeModelBinderProvider es:
- Anotado como obsoleto.
- Ya no está registrado de forma predeterminada.
Las aplicaciones que dependen de la presencia de ComplexTypeModelBinderProvider
en laModelBinderProviders
colección deben hacer referencia al nuevo proveedor de enlazador:
- var complexModelBinderProvider = options.ModelBinderProviders.OfType<ComplexTypeModelBinderProvider>();
+ var complexModelBinderProvider = options.ModelBinderProviders.OfType<ComplexObjectModelBinderProvider>();
UseDatabaseErrorPage obsoleto
Las plantillas de ASP.NET Core 3.1 que incluyen una opción para las cuentas de usuario individuales generan una llamada a UseDatabaseErrorPage. UseDatabaseErrorPage
ahora está obsoleto y debe reemplazarse por una combinación de AddDatabaseDeveloperPageExceptionFilter
y UseMigrationsEndPoint
, como se muestra en el código siguiente:
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();
}
Para más información, consulte este problema de GitHub.
Módulo de ASP.NET Core (ANCM)
Si el módulo de ASP.NET Core (ANCM) no era un componente seleccionado cuando Visual Studio se instaló o si se instaló una versión anterior de ANCM en el sistema, descargue el instalador de agrupación de hospedaje de .NET Core más reciente (descarga directa) y ejecute el instalador. Para obtener más información, consulte Agrupación de hospedaje.
cambios en las referencias de paquetes que afectan a algunos paquetes NuGet
Con la migración de algunos Microsoft.Extensions.*
paquetes NuGet del repositorio dotnet/extensions a dotnet/runtime , como se describe en Migración del contenido de dotnet/extensions a dotnet/runtime y dotnet/aspnetcore (aspnet/Announcements #411), se están aplicando cambios de empaquetado a algunos de los paquetes migrados. Estos cambios suelen dar lugar a cambios de espacio de nombres para la API de .NET.
Para investigar aún más las API para los cambios en el espacio de nombres de la aplicación al migrar a la versión 5.0, use el explorador de la API de .NET.
Migrar Microsoft.Identity. Web
En las páginas wiki siguientes se explica cómo migrar Microsoft.Identity. Web de ASP.NET Core 3.1 a 5.0:
Los tutoriales siguientes también explican la migración:
- Una aplicación web ASP.NET Core que inicia sesión a los usuarios con la plataforma de identity de Microsoft de tu organización. Vea Opción 2: Crear el ejemplo desde la línea de comandos.
- Inicie sesión un usuario con la plataforma Microsoft identity en una aplicación de escritorio de WPF y llame a una API web de ASP.NET Core. Consulte Cómo se creó el código.
Revisar cambios importantes
Para conocer los cambios importantes de .NET Core 3.1 a .NET 5.0, consulte Cambios importantes para la migración de la versión 3.1 a la 5.0. ASP.NET Core y Entity Framework Core también se incluyen en la lista.