Depuración de aplicaciones .NET en WSL con Visual Studio
Puede ejecutar y depurar fácilmente las aplicaciones de .NET Core y .NET 5+ en Linux sin salir de Visual Studio mediante el Subsistema de Windows para Linux (WSL). Si es un desarrollador multiplataforma, puede usar este método como una manera sencilla de probar más entornos de destino.
Para un usuario de Windows .NET destinado a Linux, WSL reside en un punto dulce entre el realismo de producción y la productividad. En Visual Studio, puede depurar en un entorno remoto de Linux mediante el depurador remoto, o bien con contenedores mediante las herramientas de contenedor. Cuando el realismo de producción es su principal preocupación, debe usar una de esas opciones. Cuando un bucle interno fácil y rápido es más importante, WSL es una excelente opción.
¡No tienes que elegir solo un método! Puede tener un perfil de inicio para Docker y WSL en el mismo proyecto y elegir lo que sea adecuado para una ejecución determinada. Una vez implementada la aplicación, siempre puede usar el depurador remoto para asociarla si hay algún problema. Para depurar un contenedor de Docker de Linux que se ejecuta en WSL, consulte Asociación a procesos que se ejecutan en contenedores de Docker.
Nota
A partir de Visual Studio 2019 versión 16.11 Preview 3, el destino de depuración de WSL 2 se cambió a WSL.
Prerrequisitos
Visual Studio 2019, versión 16.9 Preview 1 o versiones posteriores, con la depuración de .NET con el componente opcional para WSL.
Para buscar el componente para WSL, seleccione Herramientas>Get Tools and Features (Obtener herramientas y características). En el Instalador de Visual Studio, asegúrese de que el componente está instalado eligiendo pestaña Componentes individuales y escribiendo WSL como término de búsqueda.
En algunas versiones de Visual Studio, el componente opcional se incluye de forma predeterminada con algunas de las cargas de trabajo de .NET.
Instalación de WSL.
Inicio de la depuración con WSL
Después de instalar los componentes necesarios, abra una aplicación web de ASP.NET Core o una aplicación de consola de .NET Core en Visual Studio Verá un nuevo perfil de inicio denominado WSL:
Seleccione este perfil para agregarlo a su archivo launchSettings.json.
Algunos de los atributos clave del archivo se muestran en el ejemplo siguiente.
Nota
A partir de Visual Studio 2022 Preview 3, el nombre del comando del perfil de inicio cambió de WSL2 a WSL.
"WSL": { "commandName": "WSL", "launchBrowser": true, "launchUrl": "https://localhost:5001", "environmentVariables": { "ASPNETCORE_URLS": "https://localhost:5001;http://localhost:5000", "ASPNETCORE_ENVIRONMENT": "Development" }, "distributionName": "" }
"WSL": { "commandName": "WSL2", "launchBrowser": true, "launchUrl": "https://localhost:5001", "environmentVariables": { "ASPNETCORE_URLS": "https://localhost:5001;http://localhost:5000", "ASPNETCORE_ENVIRONMENT": "Development" }, "distributionName": "" }
Una vez seleccionado el nuevo perfil, la extensión comprueba que la distribución de WSL está configurada para ejecutar aplicaciones .NET y le ayuda a instalar las dependencias que faltan. Después de instalar estas dependencias, ya podrá depurar en WSL.
Inicie la depuración de la forma habitual; la aplicación se ejecutará en la distribución predeterminada de WSL.
Una manera sencilla de comprobar que se ejecuta en Linux es comprobar el valor de
Environment.OSVersion
.
Nota
Solo se han probado Ubuntu y Debian y son compatibles. Otras distribuciones admitidas por .NET deberían funcionar, pero se necesita la instalación manual del runtime de .NET y de Curl.
Elección de una distribución específica
De forma predeterminada, el perfil de inicio de WSL 2 usa la distribución predeterminada como se establece en wsl.exe. Si desea que el perfil de inicio tenga como destino una distribución específica, independientemente de ese valor predeterminado, puede modificar el perfil de inicio. Por ejemplo, si está depurando una aplicación web y quiere probarla en Ubuntu 20.04, el perfil de inicio tendría el siguiente aspecto:
"WSL": {
"commandName": "WSL",
"launchBrowser": true,
"launchUrl": "https://localhost:5001",
"environmentVariables": {
"ASPNETCORE_URLS": "https://localhost:5001;http://localhost:5000",
"ASPNETCORE_ENVIRONMENT": "Development"
},
"distributionName": "Ubuntu-20.04"
}
"WSL": {
"commandName": "WSL2",
"launchBrowser": true,
"launchUrl": "https://localhost:5001",
"environmentVariables": {
"ASPNETCORE_URLS": "https://localhost:5001;http://localhost:5000",
"ASPNETCORE_ENVIRONMENT": "Development"
},
"distributionName": "Ubuntu-20.04"
}
Varias distribuciones como destino
Si va un paso más allá, si está trabajando en una aplicación que necesita ejecutarse en varias distribuciones y desea una manera rápida de probar en cada una de ellas, puede tener varios perfiles de inicio. Por ejemplo, si necesita probar la aplicación de consola en Debian, Ubuntu 18.04 y Ubuntu 20.04, puede usar los siguientes perfiles de inicio:
"WSL : Debian": {
"commandName": "WSL",
"distributionName": "Debian"
},
"WSL : Ubuntu 18.04": {
"commandName": "WSL",
"distributionName": "Ubuntu-18.04"
},
"WSL : Ubuntu 20.04": {
"commandName": "WSL",
"distributionName": "Ubuntu-20.04"
}
"WSL : Debian": {
"commandName": "WSL2",
"distributionName": "Debian"
},
"WSL : Ubuntu 18.04": {
"commandName": "WSL2",
"distributionName": "Ubuntu-18.04"
},
"WSL : Ubuntu 20.04": {
"commandName": "WSL2",
"distributionName": "Ubuntu-20.04"
}
Con estos perfiles de inicio, puede cambiar fácilmente entre las distribuciones de destino, todo ello sin dejar la comodidad de Visual Studio.
Asociación a un proceso WSL en ejecución
Además de depurar desde el inicio de la aplicación mediante F5, puede depurar mediante la asociación a un proceso de WSL en ejecución mediante la característica adjuntar al proceso.
Con la aplicación en ejecución, seleccione Depurar>Asociar al proceso.
En el tipo de conexión , elija el Subsistema de Windows para Linux (WSL) y, a continuación, elija la distribución de Linux para el destino de conexión .
Elija el y asocie el.
Configuración de WSL en el perfil de inicio
En la tabla siguiente se muestran los valores que se admiten en el perfil de inicio.
Nombre | Predeterminado | Propósito | ¿Admite tokens? |
---|---|---|---|
executablePath | dotnet | El ejecutable a ejecutar | Sí |
commandLineArgs | Valor de la propiedad TargetPath de MSBuild asignada al entorno de WSL | Argumentos de línea de comandos pasados a ejecutablePath | Sí |
workingDirectory | Para aplicaciones de consola: {OutDir} Para aplicaciones web: {ProjectDir} |
El directorio de trabajo en el que se va a iniciar la depuración. | Sí |
variables de entorno | Los pares clave-valor de variables de entorno que se van a establecer para el proceso depurado. | Sí | |
setupScriptPath | El script que se va a ejecutar antes de la depuración. Resulta útil para ejecutar scripts como ~/.bash_profile. | Sí | |
distributionName | Nombre de la distribución de WSL que se va a usar. | No | |
launchBrowser | falso | Indica si se va a iniciar o no un explorador. | No |
launchUrl | La dirección URL que se iniciará si el valor de launchBrowser es true | No |
Tokens admitidos:
{ProjectDir} : ruta de acceso al directorio del proyecto
{OutDir}: valor de la propiedad de MSBuild OutDir
Nota
Todas las rutas de acceso son para WSL no para Windows.
Pasar un argumento de línea de comandos
Utilice la configuración commandLineArgs
para pasar un argumento de línea de comandos a WSL en el perfil de inicio.
En el ejemplo siguiente, se pasan dos argumentos a un proyecto DLL denominado ConsoleApp.
"WSL": {
"commandName": "WSL",
"commandLineArgs": "\"{OutDir}/ConsoleApp.dll\" arg1 arg2"
}