Una de las mejores características de .NET Core cuando salió (y ahora de .NET) es que permite crear aplicaciones multiplataforma. Esto significa que podemos crear aplicaciones para Windows, Linux o macOS con la misma base de código y, si usamos .NET Maui o Uno Platform, podemos crear también aplicaciones móviles para Android o iOS, lo cual es genial.
Aunque se pueden utilizar otro tipo de editores, como Visual Studio Code o Jetbrains Rider, lo cierto es que la mayoría de los desarrolladores utilizan Visual Studio. Lo malo de Visual Studio es que solamente funciona en Windows y en macOS, por lo que si quieres depurar aplicaciones Linux solo te queda la opción de usar un depurador remoto ¿verdad?
Pues no. Lo cierto es que desde Visual Studio puedes depurar aplicaciones Linux directamente en Windows gracias a la magia del subsistema Linux de Windows.
Para ello hay que habilitar algunas opciones y hacer algunos ajustes en Visual Studio.
Antes de nada, asegúrate de que tienes instalado WSL2 en tu Windows y luego mira el vídeo que te pongo a continuación para ver paso a paso cómo lograrlo. Aunque esta característica está pensada para depurar sobre todo aplicaciones Web ejecutándose en Linux, también funciona con aplicaciones de consola, que es lo que muestro en el vídeo, pero tienen una pequeña limitación:
Otra cosa interesante: aunque, como se explica en el vídeo, en el caso de las aplicaciones de consola no puedes responder a las peticiones de datos que se muestren por la consola, lo que sí puedes conseguir de manera sencilla es pasarle parámetros al ejecutable cuando se vaya a lanzar para depurar.
Para ello debes abrir el archivo launchSettings.json
de la carpeta Properties
y añadir la siguiente propiedad a la definición del nodo de depuración con Linux:
"commandLineArgs": "tuApp.dll <parametros>"
Es decir, obviamente hay que sustituir el nombre de tu aplicación y los parámetros que quieras. Solo un detalle importante: debes poner la extensión .dll
y no .exe
, aunque sea un programa de línea de comandos. El motivo es que en .NET el .exe
en realidad es un lanzador para el verdadero ensamblado que es la DLL y, por lo tanto, lo que se lanza y se depura es este último archivo.
¡Espero que te resulte útil!