Migración de ASP.NET Core 3.1 a 6.0
En este artículo se explica cómo actualizar un proyecto de ASP.NET Core 3.1 existente a ASP.NET Core 6.0. Para actualizar de ASP.NET Core 5.0 a 6.0, consulte Migración de ASP.NET Core 5.0 a 6.0.
Requisitos previos
- Visual Studio 2022 con la carga de trabajo de ASP.NET y desarrollo web
- SDK de .NET 6.0
Actualización de la versión del SDK de .NET en global.json
Si confía en un archivo global.json
para tener como destino una versión específica del SDK de .NET, actualice la propiedad version
a la versión del SDK de .NET 6.0 instalada. Por ejemplo:
{
"sdk": {
- "version": "3.1.200"
+ "version": "6.0.100"
}
}
Actualización de la plataforma de destino
Actualizar el archivo del proyecto del Moniker de la plataforma de destino (TFM) a net6.0
:
<Project Sdk="Microsoft.NET.Sdk.Web">
<PropertyGroup>
- <TargetFramework>netcoreapp3.1</TargetFramework>
+ <TargetFramework>net6.0</TargetFramework>
</PropertyGroup>
</Project>
Actualización de las referencias del paquete
En el archivo del proyecto, actualice el atributo Version
de cada paquete de referencia Microsoft.AspNetCore.*
, Microsoft.EntityFrameworkCore.*
, Microsoft.Extensions.*
y System.Net.Http.Json
a 6.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="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>
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.
Modelo de hospedaje mínimo
Las plantillas de ASP.NET Core generan códigos mediante el nuevo modelo de hospedaje mínimo. El modelo de hospedaje mínimo unifica Startup.cs
y Program.cs
en un archivo individual Program.cs
. ConfigureServices
y Configure
ya no se usan. Las aplicaciones que migran de ASP.NET Core 3.1 a 6.0 no necesitan usar el modelo de hospedaje mínimo, usando Startup
y el host genérico usado por las plantillas de ASP.NET Core 3.1 es totalmente compatible.
Para usar Startup
con el nuevo modelo de hospedaje mínimo, consulte Uso del Startup con el nuevo modelo de hospedaje mínimo.
Para migrar al nuevo modelo de hospedaje mínimo con el siguiente patrón usado por las plantillas de ASP.NET Core 6.0, consulte Ejemplos de código migrados al nuevo modelo de hospedaje mínimo en ASP.NET Core 6.0 y Migrar de ASP.NET Core 5.0 a 6.0
Actualizar bibliotecas de clases (RCL) Razor
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 6.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>net6.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>net6.0</TargetFramework>
<AddRazorSupportForMvc>true</AddRazorSupportForMvc>
</PropertyGroup>
Blazor
Para adoptar todas las características de la versión 5.0 y las de la versión 6.0 para las aplicaciones Blazor, se recomienda el siguiente proceso:
- Cree un nuevo proyecto de Blazor 6.0 a partir de una de las plantillas de proyecto de Blazor. Para más información, vea Herramientas para ASP.NET Core Blazor.
- Mueva los componentes y el código de la aplicación a la aplicación 6.0 con modificaciones para adoptar las nuevas características 5.0 y 6.0.
Actualización de imágenes de Docker
En el caso de aplicaciones que usen Docker, actualice las instrucciones y los scripts de DockerfileFROM
. Use una imagen de base que incluya el entorno de ejecución de ASP.NET Core 6.0. Tenga en cuenta la siguiente diferencia de comandos de docker pull
entre ASP.NET Core 3.1 y 6.0:
- docker pull mcr.microsoft.com/dotnet/core/aspnet:3.1
+ docker pull mcr.microsoft.com/dotnet/aspnet:6.0
Como parte del traslado a ".NET" como nombre del producto, las imágenes de Docker se movieron de los repositorios mcr.microsoft.com/dotnet/core
a mcr.microsoft.com/dotnet
. Para más información, consulte .NET 5.0: cambio de nombre del repositorio de Docker (dotnet/dotnet-docker #1939).
Cambios de enlace de modelos en ASP.NET Core MVC y páginas Razor
Los valores DateTime
están enlazados al modelo según el horario 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
ReemplaceComplexTypeModelBinderProvider
\ 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 la colección ModelBinderProviders
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 obtener más información, vea Middleware obsoleto DatabaseErrorPage (dotnet/aspnetcore #24987).
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.
Cambio de nombre de la aplicación
En .NET 6, WebApplicationBuilder normaliza la ruta de acceso raíz del contenido para finalizar con DirectorySeparatorChar. La mayoría de las aplicaciones que migran desde HostBuilder o WebHostBuilder no tendrán el mismo nombre de aplicación porque no se normalizan. Para obtener más información, consulte SetApplicationName
Revisar cambios importantes
Consulte los siguientes recursos:
- Identity: se ha cambiado la versión de Bootstrap predeterminada de la interfaz de usuario
- 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.
- Cambios importantes para la migración de la versión 5.0 a la 6.0: incluye ASP.NET Core y Entity Framework Core.
- Repositorio de GitHub de anuncios (aspnet/Announcements, etiqueta
6.0.0
): incluye información importante y no importante. - Repositorio de GitHub de anuncios (aspnet/Announcements, etiqueta
5.0.0
): incluye información importante y no importante.