Migración de ASP.NET Core 6.0 a 7.0
En este artículo se explica cómo actualizar un proyecto de ASP.NET Core 6.0 existente a ASP.NET Core 7.0.
Requisitos previos
Visual Studio 2022 con la carga de trabajo de ASP.NET y desarrollo web
Actualización de la versión del SDK de .NET Core en global.json
Si confía en un archivo global.json para tener como destino una versión específica del SDK de .NET Core, actualice la propiedad version
a la versión del .NET SDK 7.0 instalada. Por ejemplo:
{
"sdk": {
- "version": "6.0.200"
+ "version": "7.0.100"
}
}
Actualización de la plataforma de destino
Actualizar el archivo del proyecto del Moniker de la plataforma de destino (TFM) a net7.0
:
<Project Sdk="Microsoft.NET.Sdk.Web">
<PropertyGroup>
- <TargetFramework>net6.0</TargetFramework>
+ <TargetFramework>net7.0</TargetFramework>
</PropertyGroup>
</Project>
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 7.0.0 o posterior. Por ejemplo:
<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
Adopción de características de .NET 7
Después de seguir las instrucciones anteriores de este artículo para actualizar una aplicación a la versión 7.0, adopte características específicas siguiendo los vínculos de Novedades de ASP.NET Core 7.0.
Para adoptar todas las nuevas características de la versión 7.0 para las aplicacionesBlazor, se recomienda el siguiente proceso:
- Cree un nuevo proyecto 7.0 Blazor 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 7.0 realizando modificaciones para adoptar las nuevas características 7.0.
Simplificación del enlace de parámetros de componente
En versiones anteriores Blazor , el enlace entre varios componentes requería el enlace a las propiedades con get
/set
descriptores de acceso.
En .NET 6 y versiones anteriores:
<NestedGrandchild @bind-GrandchildMessage="BoundValue" />
@code {
...
private string BoundValue
{
get => ChildMessage ?? string.Empty;
set => ChildMessageChanged.InvokeAsync(value);
}
}
En .NET 7, puede usar los nuevos @bind:get
modificadores y @bind:set
para admitir el enlace de datos bidireccional y simplificar la sintaxis de enlace:
<NestedGrandchild @bind-GrandchildMessage:get="ChildMessage"
@bind-GrandchildMessage:set="ChildMessageChanged" />
Para obtener más información, consulte el contenido siguiente en el artículo Enlace de datos:
Migración de la interoperabilidad de JavaScript deserializada
La interoperabilidad deserializada mediante la interfaz IJSUnmarshalledRuntime está obsoleta y debe reemplazarse por la interoperabilidad [JSImport]
/[JSExport]
de JavaScript.
Para obtener más información, consulta Interoperabilidad Import/Export de JavaScript con ASP.NET Core Blazor.
La autenticación de Blazor WebAssembly usa el estado del historial para las redirecciones
La compatibilidad con la autenticación en aplicaciones de Blazor WebAssembly cambió para depender del estado del historial de navegación en lugar de cadenas de consulta en la dirección URL. Como resultado, si se pasa la dirección URL de retorno a través de la cadena de consulta, se produce un error al redirigir de vuelta a la página original después de un inicio de sesión correcto en .NET 7.
En el ejemplo siguiente se muestra el enfoque de redireccionamiento anterior para las aplicaciones que tienen como destino .NET 6 o versiones anteriores en , que se basa en RedirectToLogin.razor
una dirección URL de redireccionamiento (?returnUrl=
) con NavigateTo:
@inject NavigationManager Navigation
@using Microsoft.AspNetCore.Components.WebAssembly.Authentication
@code {
protected override void OnInitialized()
{
Navigation.NavigateTo(
$"authentication/login?returnUrl={Uri.EscapeDataString(Navigation.Uri)}");
}
}
En el ejemplo siguiente se muestra el nuevo enfoque de redireccionamiento para las aplicaciones que tienen como destino .NET 7 o posterior en , que se basa en RedirectToLogin.razor
el estado del historial de navegación con 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);
}
}
Como parte de este cambio, SignOutSessionStateManager está obsoleto en .NET 7 o posterior y se reemplaza por NavigateToLogout.
En el ejemplo siguiente se muestra el enfoque anterior en Shared/LoginDisplay.razor
de una aplicación generada a partir de la plantilla de proyecto Blazor WebAssembly:
@inject SignOutSessionStateManager SignOutManager
...
@code{
private async Task BeginLogout(MouseEventArgs args)
{
await SignOutManager.SetSignOutState();
Navigation.NavigateTo("authentication/logout");
}
}
En el ejemplo siguiente se muestra el nuevo enfoque en Shared/LoginDisplay.razor
que llama a NavigateToLogout. La inserción (@inject
) de SignOutSessionStateManager se quita de las directivas del componente en la parte superior del archivo y el método BeginLogOut
se actualiza al código siguiente:
@code{
public void BeginLogOut()
{
Navigation.NavigateToLogout("authentication/logout");
}
}
El registro del servicio de SignOutSessionStateManager se quita en Program.cs
:
- builder.Services.AddScoped<SignOutSessionStateManager>();
Para obtener más información, vea los siguientes recursos:
- [Cambio importante]: Novedades a autenticación en aplicaciones webassembly
- Enrutamiento y navegación de Blazor de ASP.NET Core
- Protección de en ASP.NET CoreBlazor WebAssembly
- Autenticación y autorización de ASP.NET Core Blazor
Herramientas de compilación de WebAssembly de .NET para proyectos de .NET 6
Ahora puede usar las herramientas de compilación de WebAssembly de .NET con un proyecto de .NET 6 al trabajar con el SDK de .NET 7. La nueva carga de trabajo wasm-tools-net6
incluye las herramientas de compilación de WebAssembly de .NET para proyectos de .NET 6 para que se puedan usar con el SDK de .NET 7. La carga de trabajo wasm-tools
existente instala las herramientas de compilación de .NET WebAssembly para proyectos de .NET 7. Sin embargo, la versión de .NET 7 de las herramientas de compilación .de .NET WebAssembly no es compatible con proyectos existentes compilados con .NET 6. Los proyectos que usen herramientas de compilación de .NET WebAssembly que tienen que admitir .NET 6 y .NET 7 deben ser compatibles con múltiples versiones (multi-targeting).
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 base que incluya el entorno de ejecución de ASP.NET Core 7.0. Tenga en cuenta la siguiente diferencia de comandos de docker pull
entre ASP.NET Core 6.0 y 7.0:
- docker pull mcr.microsoft.com/dotnet/aspnet:6.0
+ docker pull mcr.microsoft.com/dotnet/aspnet:7.0
Revisar cambios importantes
Para obtener cambios importantes de .NET Core 6.0 a .NET 7.0, consulte Cambios importantes en .NET 7. ASP.NET Core y Entity Framework Core se incluyen en la lista.