Compartir a través de


Migración desde ASP.NET Core en .NET 6 .NET 7

En este artículo se explica cómo actualizar un proyecto de ASP.NET Core existente en .NET 6 a .NET 7.

Requisitos previos

Actualización de la versión del SDK de .NET Core en global.json

Si confía en un global.json archivo para tener como destino una versión específica del SDK de .NET Core, actualice la version propiedad a la versión del SDK de .NET 7 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 en este artículo para actualizar una aplicación a .NET 7, adopte características específicas siguiendo los vínculos de Novedades de ASP.NET Core en .NET 7.

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 o 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.razoruna 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.razorel 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:

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 DockerfileFROM. Use una imagen base que incluya el ASP.NET Core en el entorno de ejecución de .NET 7. Tenga en cuenta la siguiente docker pull diferencia de comandos entre ASP.NET Core en .NET 6 y .NET 7:

- 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 6 a .NET 7, consulte Cambios importantes en .NET 7. ASP.NET Core y Entity Framework Core se incluyen en la lista.