• Tiempo de lectura:6 minutos de lectura
  • Categoría de la entrada:Framework Multiplataforma

Con el lanzamiento de .NET 6, el uso de ASP.NET Core ofrece aún más ventajas.

Pero migrar el código existente a ASP.NET Core suele parecer una gran inversión. Hoy compartiremos cómo puede acelerar la migración a ASP.NET Core.

Hay cambios menores que puede realizar hoy que pueden facilitar la migración a ASP.NET Core mañana.

Antes de comenzar, hablemos de un escenario real. Hablemos de cómo modificar el código en una aplicación de 10 años para que pueda compartirse con ASP.NET Core.

En las siguientes secciones, brindaremos muestras que migran desde la aplicación MVC Music Store que se usó para la demostración de ASP.NET MVC3.ShoppingCartController.cs

El primer paso para migrar esta aplicación web es crear un nuevo proyecto ASP.NET Core Web App (Model-View-Controller) . Esta plantilla agregará compatibilidad con los controladores y asignará la ruta predeterminada para los controladores en el archivo.

Una vez que tengamos la configuración del nuevo proyecto, eliminaremos los archivos predeterminados y de vista para que podamos compartir contenido de la aplicación web MVC3 Music Store sin conflictos.Program.cs``HomeController``Home/Index``Home/Privacy

Puedes compartir Controladores

Lo primero que puede compartir entre los dos proyectos son los controladores. Muchos equipos quieren que el nuevo sitio web funcione igual que el actual. Y cuando decimos “lo mismo” queremos decir “lo mismo”.

Si corrige un error en un proyecto, entonces necesita que la misma solución aparezca en ambos sitios. Una de las formas más fáciles de asegurar este comportamiento es compartir el mismo archivo en ambos proyectos.

Afortunadamente, ASP.NET Core usa los nuevos archivos de proyecto de estilo SDK. Eso significa que es fácil abrir el archivo csproj y agregar algunos cambios porque los archivos son muy legibles.

Para comenzar a compartir una clase de controlador, deberá crear <ItemGroup>y agregar una referencia a la clase existente. Este es un ejemplo que muestra cómo compartir el archivo csproj del proyecto ASP.NET Core.ShoppingCartController.cs

    <ItemGroup>
        <Compile Include="..MvcMusicStoreControllersShoppingCartController.cs" LinkBase="Controllers" />
    </ItemGroup>

Bien, ahora el archivo está incluido en el proyecto, pero es posible que haya adivinado que el proyecto ASP.NET Core ya no se compila. En ASP.NET Core, la Controllerclase no usa System.Web.Mvc , usa Microsoft.AspNetCore.Mvc .

Aquí hay una muestra que muestra cómo pueden usar ambos espacios de nombres para corregir ese error del compilador.ShoppingCartController.cs

#if NET
using Microsoft.AspNetCore.Mvc;
#else
using System.Web.Mvc;
#endif

Hay otros lugares en el ShoppingCartControllerque deberían actualizarse, pero el enfoque es el mismo. Usando las directivas de preprocesador de C# , podemos hacer que la clase sea lo suficientemente flexible como para compilar para ambos proyectos.

Para escenarios con grandes secciones de código que funcionan de manera diferente para ASP.NET Core, es posible que desee crear archivos específicos de implementación.

Un buen enfoque es crear una clase parcial y extraer esos bloques de código a nuevos métodos que sean diferentes entre los dos objetivos de la aplicación web y usar csproj para controlar qué archivos se incluyen al compilar el proyecto.

Puedes compartir Modelos

Ahora que podemos compartir controladores, queremos compartir los modelos que devuelven. En muchos escenarios, esto comenzará a funcionar cuando los incluyamos agregando otro <ItemGroup>al archivo csproj.

Pero si sus modelos también hacen referencia , entonces podemos usar el mismo enfoque que acabamos de usar para los Controladores. Comience por actualizar los espacios de nombres para que el mismo archivo de clase pueda existir en ambos proyectos.

Siga usando las directivas del precompilador de C# para agregar compatibilidad con ASP.NET Core.System.Web

Aquí hay una muestra que muestra cómo modificar el atributo.[Bind]

#if !NET
    [Bind(Exclude="OrderId")]
#endif
    public partial class Order
    {
        [ScaffoldColumn(false)]
#if NET
    [BindNever]
#endif
        publicintOrderId{ get; set; }
   …
   …

Puedes compartir Vistas

Incluso podemos compartir puntos de vista. Usando el mismo enfoque nuevamente, podemos editar el archivo csproj para compartir archivos como el.

Y, dentro de la vista, puede seguir usando las directivas del precompilador de C# para hacer que el archivo sea lo suficientemente flexible para que lo usen ambos proyectos._Layout.cshtml

Esto es lo que parece tener una página maestra con soporte combinado para Acciones secundarias de ASP.NET y Ver componentes de ASP.NET Core para que podamos representar la parte de la página que sabe cuántos artículos hay en el carrito de compras.

@{
    #if NET
        <text>@awaitComponent.InvokeAsync("CartSummary")</text>
    #else
        @Html.RenderAction("CartSummary", "ShoppingCart");
    #endif
}

Terminando

La capacidad de compartir código también incluye contenido estático como CSS, JavaScript e imágenes. Paso a paso, puede incorporar flexibilidad a su aplicación web hoy mismo para facilitar la migración a ASP.NET Core.

Si desea una guía más detallada para migrar todo , puede seguir un tutorial completo con muestras en MvcMusicStoreMigration.

El tutorial también demostrará cómo puede ejecutar tanto ASP.NET como ASP.NET Core desde el mismo grupo de aplicaciones de IIS para migrar gradualmente su aplicación web, un controlador a la vez.ShoppingCartController.cs

Para aquellos que planean comenzar a trabajar en su migración de ASP.NET Core, compartiremos algunos consejos más.

  • Actualice sus paquetes de NuGet para que pueda usar netstandard.
  • Cambie sus bibliotecas de clases a netstandard para que pueda compartir código entre ASP.NET y ASP.NET Core.
  • Encuentre referencias a interfaces de compilación en sus bibliotecas de clases, reemplácelas. Utilice la inserción de dependencias para que pueda cambiar fácilmente entre las características de ASP.NET y ASP.NET Core.System.Web

También puede encontrar más orientación en nuestros documentos en Migración de ASP.NET a ASP.NET Core.

Fuente: Sharing code between ASP.NET and ASP.NET Core