Blog de Amazon Web Services (AWS)

Anuncio del Asistente de portabilidad para .NET (Porting Assistant for .NET)

Por Steve Roberts, Developer Advocate, especializado en .NET y PowerShell development en AWS

 

¡.NET Core es el futuro de .NET! La versión 4.8 de.NET Framework es la última versión importante que se publicará, Microsoft ha declarado que en el futuro sólo recibirá correcciones relacionadas con errores, fiabilidad y seguridad. Para las aplicaciones en las que desea seguir aprovechando las futuras inversiones e innovaciones en la plataforma .NET, debe considerar la posibilidad de transferir sus aplicaciones a .NET Core. Además, hay razones adicionales para considerar la posibilidad de transferir aplicaciones a .NET Core, como beneficiarse de la innovación en Linux y código abierto, mejorar el escalado y el rendimiento de las aplicaciones y reducir el gasto en licencias. Sin embargo, la portabilidad puede implicar un esfuerzo manual significativo, algunos de los cuales son actividades operativas no primarias, como actualizar las referencias a las dependencias del proyecto.

Al portar aplicaciones de .NET Framework, los desarrolladores necesitan buscar paquetes NuGet compatibles y actualizar esas referencias de paquetes en los archivos de proyecto de la aplicación, que también deben actualizarse al formato de archivo de proyecto de .NET Core. Además, necesitan encontrar APIs de reemplazo ya que .NET Core contiene un subconjunto de las API disponibles en .NET Framework. A medida que la portabilidad avanza, los desarrolladores tienen que recorrer largas listas de errores de compilación y advertencias para determinar los mejores o más prioritarios lugares para continuar desactivando la tarea. Sobra decir que esto es un reto, y la complejidad adicional podría disuadir a los clientes con grandes portafolios de aplicaciones.

Hoy anunciamos el Asistente de Portabilidad para .NET, una nueva herramienta que ayuda a los clientes a analizar y portar sus aplicaciones de .NET Framework a .NET Core que se ejecutan en Linux. El Asistente de portabilidad para .NET evalúa tanto el código fuente de la aplicación como el árbol completo de dependencias de API públicas y paquetes NuGet para identificar aquellos incompatibles con .NET Core y guía a los desarrolladores para encontrar  reemplazos compatibles cuando estén disponibles. El motor de sugerencias para reemplazos de API y paquetes está diseñado para mejorar con el tiempo a medida que el asistente aprende más sobre los patrones de uso, y la frecuencia de los paquetes y API que faltan.

El Asistente de portabilidad para .NET difiere de otras herramientas ya que es capaz de evaluar el árbol completo de dependencias de paquetes, no solo API incompatibles. También utiliza archivos de solución como punto de partida, lo que facilita la evaluación de soluciones monolíticas que contienen un gran número de proyectos, en lugar de tener que analizar y agregar información en binarios individuales. Estas y otras habilidades dan a los desarrolladores un avance inicial en el proceso de portabilidad.

 

Analizar y portar una aplicación

Empezar a portar aplicaciones mediante el Asistente de portabilidad para .NET es fácil, con sólo un par de requisitos previos. Primero, se necesita instalar el SDK de.NET Core 3.1. En segundo lugar, necesitará un perfil de credenciales (compatibles con AWS Command Line Interface (CLI), aunque la CLI no se utilizará). El perfil de credenciales se utiliza para recopilar información de compatibilidad de las API y paquetes públicos (de NuGet y paquetes principales de Microsoft) utilizados en la aplicación y los paquetes NuGet públicos a los que hace referencia. Con esos requisitos previos, descargue y ejecute el instalador para el asistente.

Con el asistente instalado, y con el código fuente de su aplicación, inicie el Asistente de portabilidad para .NET desde el menú Inicio. Si usted ha evaluado previamente algunas soluciones, puede verlas y abrirlas desde la pantalla Soluciones evaluadas , lo que le permitirá continuar donde lo dejó. O puede seleccionar Empezar, como en la imagen, desde la página principal para comenzar a evaluar el archivo de solución de su aplicación.

 

 

Solicita que seleccione el perfil de credenciales que se quiere usar, y aquí también se puede optar por compartir los datos de telemetría. Compartir estos datos ayuda a mejorar aún más la precisión de las sugerencias para todos los usuarios a medida que pasa el tiempo, y es útil para identificar problemas, por lo que esperamos que considere la posibilidad de participar.

 

 

Haga clic en Siguiente, busque para seleccionar el archivo de solución que desee y, a continuación, haga clic en Evaluar para comenzar el análisis. Para esta publicación, se va a usar el proyecto NopCommerce de código abierto. Tenga en cuenta que se está utilizando la versión 3.80 para esta publicación, ya que esta versión todavía se basaba en .NET Framework.

 

 

Cuando se completa el análisis, se muestran los resultados generales: el número de paquetes incompatibles de los que depende la aplicación, las APIs que utiliza que son incompatibles, y una puntuación general de portabilidad. Esta puntuación es una estimación del esfuerzo necesario para portar la aplicación a .NET Core, en función del número de APIs incompatibles que utiliza. Si se está trabajando en la portabilidad de varias aplicaciones, se puede usar esto para identificar y priorizar las aplicaciones con las que se quiere comenzar primero.

 

 

Vamos a profundizar en la descripción general de la evaluación para ver lo que se descubrió. Al hacer clic en el nombre de la solución nos lleva a un panel más detallado y aquí se pueden ver los proyectos que componen la aplicación en el archivo de solución, y para cada uno los números de paquetes incompatibles y dependencias API, junto con la puntuación de portabilidad para cada proyecto en particular. También se muestra el estado actual de la portabilidad  de cada proyecto, si ya he empezado a portar la aplicación y se ha vuelto a abrir la evaluación.

Tenga en cuenta que si ningún proyecto se selecciona en la pestaña Proyectos, los datos mostrados en las pestañas Referencias del proyecto, Paquetes NuGet, API y Archivos de origen son de toda la solución, pero puede filtrar los datos si lo desea seleccionando primero un proyecto.

 

 

La pestaña Referencias del proyecto muestra una vista gráfica de las dependencias del paquete y se puede ver dónde se consumen la mayoría de las dependencias, en este caso los proyectos Npp.Core , Npp.Services y Npp.Web.Framework . Esta vista puede ayudarle a decidir por dónde podría empezar primero, para obtener el mayor valor al iniciar. También se pueden seleccionar proyectos para ver las dependencias específicas con más claridad.

 

 

La pestaña de paquetes NuGet nos da un vistazo a las dependencias compatibles e incompatibles, y sugerimos reemplazos si están disponibles. La pestaña API enumera las API incompatibles, en qué paquete se encuentran y cuántas veces se hace referencia a ellas. Los archivos de origen enumeran todos los archivos de origen que componen los proyectos de la aplicación, con una indicación de cuántas llamadas API incompatibles se pueden encontrar en cada archivo. Al seleccionar un archivo de origen se abre una vista que me muestra dónde se utilizan las API incompatibles y las versiones de paquetes sugeridas para actualizar, si existen, para resolver el problema. Si no existe una sugerencia de  remplazo simplemente actualizando a una versión de paquete diferente, entonces necesito abrir un editor de código fuente y actualizar el código para usar una API o un enfoque diferente. Aquí se observa el informe para DependencyRegistrar.cs, que existe en el proyecto Nop.Web, y usa el paquete Autofac NuGet.

 

 

Comencemos a portar la aplicación, con el proyecto Nop.Core . Primero, vuelvo a la pestaña Proyectos , se selecciona el proyecto y, a continuación, se hace clic en Portar proyecto . Durante la portabilidad, la herramienta nos ayudará a actualizar las referencias del proyecto a los paquetes NuGet, y también actualiza los archivos del proyecto a los formatos de .NET Core más recientes. Se tiene la opción de hacer una copia del archivo de solución, los archivos de proyecto y los archivos fuente de la aplicación, o se puede hacer que los cambios se realicen in situ. Aquí se ha elegido hacer una copia.

 

 

Al hacer clic en Guardar, se copia el código fuente de la aplicación en la ubicación seleccionada, y se abre la vista Portar Proyectos donde se puede establecer la nueva versión del marco de destino (en este caso netcoreapp3.1), y la lista de dependencias NuGet para el proyecto que se necesita actualizar. Para cada paquete incompatible, el Asistente de Portabilidad para .NET nos da una lista de posibles actualizaciones de versión y para cada versión, se me muestra el número de API incompatibles que permanecerán o se volverán incompatibles. Para el paquete que seleccioné aquí no hay diferencia, pero para los casos en que las versiones posteriores potencialmente aumente el número de APIs incompatibles que necesitaría corregir manualmente en el código fuente, esta indicación ayuda a tomar una decisión al evaluar pros y contras sobre si actualizar a las últimas versiones de un paquete, o quedarse con uno más antiguo.

 

 

Una vez que seleccione una versión, el campo Llamadas API obsoletas  junto al paquete le dará un recordatorio de lo que usted necesita arreglar en un editor de código. Al hacer clic en el valor se resumen las llamadas obsoletas.

 

 

Continue con este proceso para cada dependencia del paquete y cuando esté listo, haga clic en Portar para que se actualicen las referencias. Al utilizar su IDE, podrá ir a los archivos fuente y trabajar en reemplazar las llamadas API incompatibles usando el Asistente de portabilidad para .NET para sus archivos  y las vistas de lista de API obsoletas como referencia, y seguir un proceso similar para los otros proyectos en mi aplicación.

 

Mejorando del motor de sugerencias

El motor de sugerencias del Asistente de Portabilidad para .NET está diseñado para aprender y ofrecer mejores resultados con el tiempo, ademas de que los clientes pueden optar por compartir su telemetría. Los modelos de datos detrás del motor, que son el resultado del análisis de cientos de miles de paquetes únicos con millones de versiones de paquetes, están disponibles en GitHub. Esperamos que considere ayudar a mejorar la precisión y la integridad de los resultados aportando sus datos. La guía del usuario proporciona más detalles sobre cómo se utilizan los datos.

El Asistente de Portabilidad para .NET es de uso gratuito y está disponible ahora.

 

Más información:

https://aws.amazon.com/es/blogs/aws/announcing-the-porting-assistant-for-net

 

Este artículo fue traducido del Blog de AWS en Inglés.

 


Sobre los traductores

José Lorenzo Cuéncar es Senior Solutions Architects en AWS Mexico.

 

 

 

 

 

Christian Israel Castro es Senior Solutions Architects en AWS Mexico.