GNU/Linux >> Tutoriales Linux >  >> Linux

Depuración remota de una aplicación .NET Core Linux en WSL2 desde Visual Studio en Windows

Con Visual Studio Code y WSL (Subsistema de Windows para Linux) puede estar en un entorno Linux real y ejecutar "código". desde el símbolo del sistema de Linux y Visual Studio Code se iniciará en Windows y, de hecho, se dividirá por la mitad. Un VSCode-Server se ejecutará en Linux y administrará los servicios de idioma, el depurador, etc., mientras que Windows ejecuta su instancia de VS Code. También puede usar VS Code para desarrollar en máquinas remotas a través de SSH y funciona muy bien. De hecho, hay toda una serie de tutoriales remotos para consultar aquí.

VS Code es un excelente editor de código, pero no es un IDE (entorno de desarrollo integrado) completo, por lo que todavía tengo muchas razones para usar y disfrutar de Visual Studio en Windows (o Mac).

Quería ver si es posible hacer una depuración 'remota' con WSL y Visual Studio (no Code) y, de ser así, es algo que a USTED le interesa, querido lector.

  • Para empezar, tengo WSL (específicamente WSL2) en mi máquina con Windows 10. Puede obtener WSL1 hoy en Windows desde "características de Windows" simplemente agregándolo. Puede obtener WSL2 hoy en Windows Insiders "Slow Ring".
  • Entonces tengo la nueva Terminal de Windows. No es necesario para esto, pero es genial si te gusta la línea de comandos.
  • Tengo la comunidad de Visual Studio 2019

También uso .NET Core con C# para mi plataforma y el idioma de mi elección. Lo instalé desde https://dot.net/ dentro de Ubuntu 18.04, en Windows. Tengo una aplicación web (dotnet new razor ) que funciona muy bien en Linux ahora.

Desde el indicador de WSL dentro de la terminal, puedo ejecutar "explorer.exe". e iniciará el Explorador de Windows en la ruta \\wsl$\Ubuntu-18.04\home\scott\remotewebapp, pero VS actualmente tiene algunos problemas para abrir proyectos a través de este límite de red. En cambio, pondré mis cosas en c:\temp\remotewebapp y accederé desde Linux como /mnt/c/temp/remotewebapp.

En un mundo perfecto:esto es especulación/lluvia de ideas futuras, Visual Studio detectaría cuándo abrió un proyecto desde una ruta de Linux y "Haga lo correcto (tm)".

Primero tendré que asegurarme de que VSDbg esté instalado en WSL/Linux. Eso se hace automáticamente con VS Code pero lo haré manualmente en una línea como esta:

curl -sSL https://aka.ms/getvsdbgsh | /bin/sh /dev/stdin -v latest -l ~/vsdbg

Necesitaremos un archivo launch.json con suficiente información para iniciar el proyecto, adjuntarlo con el depurador y notar cuando las cosas hayan comenzado. VS Code lo hará por ti. En un futuro teórico, Visual Studio también detectaría el contexto y generaría este archivo para usted. Aquí está el mío, lo puse en .vs/launch.json en la carpeta del proyecto.

VS también creará un archivo launch.json, pero deberá agregar las dos partes más importantes, la parte $adapter y $adapterArgs como las que tengo aquí.

{
// Use IntelliSense to find out which attributes exist for C# debugging
// Use hover for the description of the existing attributes
// For further information visit https://github.com/OmniSharp/omnisharp-vscode/blob/master/debugger-launchjson.md
"version": "0.2.0",
"configurations": [
{
"$adapter": "C:\\windows\\sysnative\\bash.exe",
"$adapterArgs": "-c ~/vsdbg/vsdbg",
"name": ".NET Core Launch (web)",
"type": "coreclr",
"request": "launch",
"preLaunchTask": "build",
// If you have changed target frameworks, make sure to update the program path.
"program": "/mnt/c/temp/remotewebapp/bin/Debug/netcoreapp3.0/remotewebapp.dll",
"args": [],
"cwd": "/mnt/c/temp/remotewebapp",
"stopAtEntry": false,
// Enable launching a web browser when ASP.NET Core starts. For more information: https://aka.ms/VSCode-CS-LaunchJson-WebBrowser
"serverReadyAction": {
"action": "openExternally",
"pattern": "^\\s*Now listening on:\\s+(https?://\\S+)"
},
"env": {
"ASPNETCORE_ENVIRONMENT": "Development"
},
"sourceFileMap": {
"/Views": "${workspaceFolder}/Views"
},
"pipeTransport": {
"pipeCwd": "${workspaceRoot}",
"pipeProgram": "bash.exe",
"pipeArgs": [ "-c" ],
"debuggerPath": "~/vsdbg/vsdbg"
},
"logging": { "engineLogging": true }
}
]
}

Estos archivos launch.json son utilizados por VS y VS Code y otras cosas y le dan al sistema y al depurador suficiente para continuar. No conozco ninguna forma de automatizar este siguiente paso y adjuntarlo a un botón como "Iniciar depuración", que sería un trabajo nuevo en VS, pero puede iniciarlo así llamando a un comando de automatización VS2019 desde la "Ventana de comandos". puedes acceder con Ver | Otras ventanas | Ventana de comandos o Ctrl-Alt-A.

Una vez que he escrito esto una vez en la ventana de comandos, puedo iniciar la siguiente sesión de depuración simplemente presionando la flecha hacia arriba para obtener el comando del historial y presionando Intro. Una vez más, no es perfecto, pero es un comienzo.

DebugAdapterHost.Launch /LaunchJson:C:\temp\remotewebapp\.vs\launch.json  

Aquí hay una captura de pantalla mía depurando una aplicación .NET Core que se ejecuta en Linux bajo WSL desde Windows Visual Studio 2019.

Gracias a Andy Sterland por ayudarme a hacer que esto funcione.

Entonces, es posible, pero no es una caída automática. ¿Debería esta configuración y preparación ser automática? ¿Es el desarrollo en WSL desde Visual Studio (no Code) algo que desea? Hay un gran soporte para el desarrollo de Docker dentro de un contenedor que ya incluye la depuración interactiva, entonces, ¿dónde cree que encaja esto... si es que encaja? ¿Esto agrega algo o es más conveniente? ¿Le gustaría la depuración "F5" para aplicaciones WSL dentro de VS como puede hacerlo en VS Code?

Patrocinador: ¿Te gusta C#? ¡Nosotros también! Es por eso que hemos desarrollado un IDE .NET rápido, inteligente y multiplataforma que le brinda aún más poder de codificación. Análisis de código inteligente, finalización de código enriquecido, búsqueda y navegación instantáneas, un depurador avanzado... Con JetBrains Rider, todo lo que necesita está al alcance de su mano. Codifique C# a la velocidad del pensamiento en Linux, Mac o Windows. ¡Pruebe JetBrains Rider hoy mismo!


Linux
  1. Cómo usar un escritorio remoto desde Windows a un escritorio Linux usando XRDP

  2. Visual Basic .Net en Linux

  3. ¿Visual Basic es compatible con .NET Core en Linux?

  4. Cómo compilar código de Windows Visual C++ en Linux

  5. ¿Cómo usar rsync desde una PC con Windows a un servidor Linux remoto?

Usar Tailscale en Windows para conectarse en red más fácilmente con WSL2 y Visual Studio Code

Errores clásicos de Path.DirectorySeparatorChar al pasar de .NET Core en Windows a Linux

Soporte oficial para la depuración remota de una aplicación .NET Core Linux en WSL2 desde Visual Studio en Windows

Mover un ASP.NET Core de Azure App Service en Windows a Linux probando primero en WSL y Docker

Escritura y depuración de aplicaciones C++ de Linux desde Visual Studio mediante el subsistema de Windows para Linux

Cómo compilar la aplicación .NET Core para Linux en una máquina con Windows