Saltar al contenido

Artículos, tutoriales, trucos, curiosidades, reflexiones y links sobre programación web ASP.NET Core, MVC, Blazor, SignalR, Entity Framework, C#, Azure, Javascript... y lo que venga ;)

17 años online

el blog de José M. Aguilar

Inicio El autor Contactar

Artículos, tutoriales, trucos, curiosidades, reflexiones y links sobre programación web
ASP.NET Core, MVC, Blazor, SignalR, Entity Framework, C#, Azure, Javascript...

¡Microsoft MVP!
martes, 31 de enero de 2017
.NET CoreHace unos días hablábamos de que próximamente veremos cambios en los archivos de proyecto de las aplicaciones .NET Core, que dejarán de utilizar el popular project.json para volver al tradicional .csproj, aunque rejuvenecido y potenciado para hacerlo más versátil y utilizable en los nuevos entornos.

Para los que ya hemos comenzado a crear aplicaciones y bibliotecas ASP.NET Core, este cambio implica que en algún momento deberemos actualizarlas al nuevo formato de proyectos. Y como ya adelantamos, este proceso no va a resultar especialmente doloroso aunque obviamente tendremos que saber cómo hacerlo.

En este post vamos a tratar tres posibles escenarios de actualización:
Hey, pero antes de continuar, el tradicional disclaimer: tened en cuenta que tanto Visual Studio 2017 como el tooling de .NET Core está aún en preview, así que hay cosas que podrían variar en el futuro próximo.

1. Migrar de project.son a .csproj utilizando Visual Studio 2017

Confirmación para actualizar a .csprojEsta es de las fáciles :)

Visual Studio 2017, que en el momento de escribir estas líneas aún va por la versión RC3 (enero 2017), incluye un sistema de migración automática unidireccional en un único paso.

En otras palabras, cuando intentemos abrir un proyecto .NET Core basado en el tándem project.json/.xproj, aparecerá un cuadro de diálogo solicitándonos confirmación para realizar la migración de forma automática.

Si cancelamos, simplemente el proyecto no se abrirá, pero, si decidimos continuar, Visual Studio creará el archivo .csproj partiendo de la configuración existente y eliminará los archivos anteriores, por lo que no podremos volver a abrir el proyecto desde versiones del IDE que no soporte el nuevo .csproj (por ejemplo, VS2015 con el tooling sin actualizar).

Además, en la carpeta del proyecto encontraremos un archivo de log con el resultado de la migración, y una carpeta Backup con la copia de seguridad de los archivos de configuración originales (tanto project.son como .xproj).

Informe de migración a .csproj

Por cierto, no he podido confirmar si este sistema de migración automática se incluirá también en Visual Studio 2015, aunque hay algunas pistas que indican que no :(

Aprovecho también para comentar que el nuevo Visual Studio 2017 integrará de forma bastante natural el nuevo formato de proyectos .csproj. A diferencia de versiones anteriores, donde para editar este archivo nos veíamos obligados a descargar el proyecto completo, ahora podemos hacerlo desde el propio IDE:

Opción "Editar .csproj" en el menú contextual del proyecto de Visual Studio

Al salvar los cambios, éstos serán aplicados sin necesidad de recargar el proyecto ni nada parecido :)

2. Migrar de project.json a .csproj mediante línea de comandos

Pues esta también es de las fáciles :)

El tooling de .NET Core incluye el comando dotnet migrate que, ejecutado en el directorio raíz del proyecto o solución, migrará automáticamente los archivos de proyecto al nuevo formato, salvando una copia de los archivos previos de configuración en la carpeta backup:
C:\Proyects\Test>dir
 El volumen de la unidad C no tiene etiqueta.
 El número de serie del volumen es: AA8B-7BC7

 Directorio de C:\Projects\Test

28/01/2017  18:26    <DIR>          .
28/01/2017  18:26    <DIR>          ..
28/01/2017  18:26               246 Program.cs
28/01/2017  18:26               297 project.json
               2 archivos            543 bytes
               2 dirs  25.383.387.136 bytes libres

C:\Proyects\Test>dotnet migrate
Project Test migration succeeded (C:\Projects\Test)
Summary
Total Projects: 1
Succeeded Projects: 1
Failed Projects: 0


C:\Proyects\Test>dir
 El volumen de la unidad C no tiene etiqueta.
 El número de serie del volumen es: AA8B-7BC7

 Directorio de C:\Projects\Test

28/01/2017  18:26    <DIR>          .
28/01/2017  18:26    <DIR>          ..
28/01/2017  18:26    <DIR>          backup
28/01/2017  18:26               246 Program.cs
28/01/2017  18:26               844 Test.csproj
               2 archivos          1.090 bytes
               3 dirs  25.383.387.136 bytes libres

C:\Proyects\Test>
Este comando también podemos ejecutarlo sobre una solución si lo invocamos desde la carpeta que contiene el archivo global.json. Sin embargo, hay que tener en cuenta que la versión de tooling que indiquemos en dicho archivo será la utilizada para ejecutar el comando, por lo que si se trata de una versión antigua nos encontraríamos con un error como el siguiente:
C:\Projects\MySolution>dotnet migrate
No executable found matching command "dotnet-migrate"

C:\Projects\MySolution>
Para solucionarlo, basta con actualizar la versión del tooling en este archivo a una que sí soporte ya el comando de migración, como en el siguiente ejemplo:
{
  "projects": [ "src", "test" ],
  "sdk": {
    "version": "1.0.0-preview4-004233"
  }
}
Una vez hecho, ya podrá ejecutarse dotnet migrate sin problema.

3. Migrar de project.json a .csproj manualmente

Si sois de los que pensáis que las herramientas están sobrevaloradas, esta es vuestra solución ;D

No, en serio, no hay ningún motivo para tener que hacer esta migración manualmente, pero si aún así estáis interesados en ello, observad que cualquiera de las opciones que hemos visto anteriormente al final lo único que hacen es jugar con archivos de texto, y eso es algo que siempre podríamos hacer de forma manual. Además, será una buena excusa para dominar el nuevo formato y aprender a hacer sobre el .csproj las cosas que ya conocíamos en project.json.

De hecho, cada propiedad de project.json se mapea de forma directa a un componente de .csproj, por lo que al final se trata sólo de hacer una traducción; como referencia, Nate McMaster publicó hace unos días una guía de conversión de project.json a MSBuild (.csproj) que puede ser de mucha utilidad para conocer las equivalencias entre ambos formatos y poder editar este último con maestría ;)

Publicado en Variable not found.

Aún no hay comentarios, ¡sé el primero!