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

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.

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 más información, consulte Interoperabilidad JSImport/JSExport 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, que se basa en 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, que se basa en 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 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:

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 las aplicaciones que usan Docker, actualice las instrucciones y scripts de Dockerfiley 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.