Actualización incremental de ASP.NET a ASP.NET Core

Actualizar una aplicación ASP.NET Framework a ASP.NET Core no es trivial para la mayoría de las aplicaciones de producción. Estas aplicaciones suelen incorporar nuevas tecnologías a medida que están disponibles y a menudo se componen de muchas decisiones heredadas. En este artículo se proporcionan instrucciones y vínculos a herramientas para actualizar las aplicaciones ASP.NET Framework a ASP.NET Core con el menor cambio posible.

Uno de los desafíos más grandes es el uso generalizado de HttpContext a lo largo de una base de código. Sin el enfoque incremental y las herramientas, se requiere una reescritura a gran escala para quitar la dependencia de HttpContext. Los adaptadores de dotnet/systemweb-adapters proporcionan un conjunto de asistentes en tiempo de ejecución para acceder a los tipos usados en la aplicación ASP.NET Framework de forma que funcione en ASP.NET Core con cambios mínimos.

Una migración completa puede tardar considerablemente en función del tamaño de la aplicación, las dependencias y las API no portátiles usadas. Para seguir implementando una aplicación en producción mientras se trabaja en la actualización, el mejor patrón es seguir es el patrón Strangler Fig. El patrón Strangler Fig permite el desarrollo continuo en el sistema antiguo con un enfoque incremental para reemplazar partes específicas de la funcionalidad por nuevos servicios. En este documento se describe cómo aplicar el patrón Strangler Fig a una aplicación ASP.NET que se actualiza como ASP.NET Core.

Si quiere omitir este artículo de información general y empezar, consulte Introducción.

Migración de la aplicación a ASP.NET Core

Antes de iniciar la migración, la aplicación tiene como destino ASP.NET Framework y se ejecuta en Windows con sus bibliotecas auxiliares:

Before starting the migration

La migración comienza introduciendo una nueva aplicación basada en ASP.NET Core que se convierte en el punto de entrada. Las solicitudes entrantes van a la aplicación ASP.NET Core, que controla la solicitud o envía la solicitud a la aplicación .NET Framework a través de YARP. Al principio, la mayoría del código que proporciona respuestas está en la aplicación .NET Framework, pero la aplicación ASP.NET Core ahora está configurada para empezar a migrar rutas:

start updating routes

Para migrar la lógica de negocios que se basa en HttpContext, las bibliotecas deben compilarse con Microsoft.AspNetCore.SystemWebAdapters. Compilar las bibliotecas con SystemWebAdapters permite:

  • Compilar las bibliotecas en .NET Framework, .NET Core o .NET Standard 2.0.
  • Garantizar que las bibliotecas usan las API que están disponibles en ASP.NET Framework y ASP.NET Core.

Microsoft.AspNetCore.SystemWebAdapters

Una vez configurada la aplicación ASP.NET Core mediante YARP, puede empezar a actualizar las rutas de ASP.NET Framework a ASP.NET Core. Por ejemplo, métodos de acción de controlador de WebAPI o MVC, controladores u otra implementación de una ruta. Si la ruta está disponible en la aplicación ASP.NET Core, coincide y se sirve.

Durante el proceso de migración, se identifican los servicios y las infraestructuras adicionales que se deben actualizar para que se ejecuten en .NET Core. Entre las opciones enumeradas en orden de mantenimiento se incluyen:

  1. Traslado del código a bibliotecas compartidas
  2. Vinculación del código en el nuevo proyecto
  3. Duplicar el código

Finalmente, la aplicación ASP.NET Core controla más de las rutas que la aplicación .NET Framework:

the ASP.NET Core app handles more of the routes

Una vez que la aplicación ASP.NET Framework ya no es necesaria y es eliminada:

  • La aplicación se ejecuta en la pila de aplicaciones de ASP.NET Core, pero sigue usando los adaptadores.
  • El trabajo de migración restante está quitando el uso de adaptadores.

final pic

La extensión de Visual Studio Asistente para actualización de .NET puede ayudar a actualizar las aplicaciones web de ASP.NET Framework a ASP.NET Core. Para obtener más información, consulte la entrada de blog Actualización de los proyectos de .NET con Visual Studio.

Adaptadores System.Web

El espacio de nombres Microsoft.AspNetCore.SystemWebAdapters es una colección de los asistentes en tiempo de ejecución que facilitan el uso del código escrito en System.Web mientras se mueven a ASP.NET Core. Hay algunos paquetes que se pueden usar para usar características de estos adaptadores:

  • Microsoft.AspNetCore.SystemWebAdapters: este paquete se usa en bibliotecas auxiliares y proporciona las API System.Web en las que puede haber tomado una dependencia, como HttpContext y otros. Este paquete tiene como destino .NET Standard 2.0, .NET 4.5+ y .NET 6+.
  • Microsoft.AspNetCore.SystemWebAdapters.FrameworkServices: este paquete solo tiene como destino .NET Framework y está pensado para proporcionar servicios a aplicaciones de ASP.NET Framework que pueden necesitar proporcionar migraciones incrementales. Por lo general, no se espera que se haga referencia a esto desde las bibliotecas, sino desde las propias aplicaciones.
  • Microsoft.AspNetCore.SystemWebAdapters.CoreServices: este paquete solo tiene como destino .NET 6+ y está pensado para proporcionar servicios a ASP.NET Core aplicaciones para configurar el comportamiento de las API de System.Web, así como participar en cualquier comportamiento para la migración incremental. Por lo general, no se espera que se haga referencia a esto desde las bibliotecas, sino desde las propias aplicaciones.
  • Microsoft.AspNetCore.SystemWebAdapters.Abstractions: este paquete es un paquete auxiliar que proporciona abstracciones para los servicios usados por la aplicación ASP.NET Core y ASP.NET Framework, como la serialización de estado de sesión.

Para obtener ejemplos de escenarios en los que esto resulta útil, consulte el artículo sobre adaptadores.

Para obtener instrucciones sobre el uso, consulte el artículo de instrucciones de uso.

Recursos adicionales