Eseguire il debug di app .NET in WSL con Visual Studio
È possibile eseguire ed eseguire facilmente il debug delle app .NET Core e .NET 5+ in Linux senza uscire da Visual Studio usando sottosistema Windows per Linux (WSL). Gli sviluppatori multipiattaforma possono usare questo metodo come metodo semplice per testare più ambienti di destinazione.
Per un utente di Windows .NET destinato a Linux, WSL si trova in un punto ideale tra realismo della produzione e produttività. In Visual Studio è già possibile eseguire il debug in un ambiente Linux remoto usando il debugger remoto o con i contenitori usando Strumenti contenitore. Quando il realismo della produzione è la tua preoccupazione principale, dovresti usare una di queste opzioni. Quando un ciclo interno semplice e veloce è più importante, WSL è un'ottima opzione.
Non è necessario scegliere un solo metodo. È possibile avere un profilo di avvio per Docker e WSL nello stesso progetto e scegliere quale sia appropriato per una determinata esecuzione. Una volta distribuita l'app, puoi sempre usare il debugger remoto per collegarlo in caso di problemi. Per eseguire il debug di un contenitore Docker Linux in esecuzione in WSL, vedere Connettersi a un processo in esecuzione in un contenitore Docker.
Nota
A partire da Visual Studio 2019 versione 16.11 Preview 3, la destinazione di debug WSL 2 è stata rinominata in WSL.
Prerequisiti
Visual Studio 2019 v16.9 Preview 1 o versioni successive con il componente facoltativo .NET Debugging with WSL (Debug di .NET con WSL facoltativo).
Per verificare la presenza del componente WSL, scegliere Strumenti Recupera strumenti>e funzionalità. Nella Programma di installazione di Visual Studio assicurarsi che il componente sia installato scegliendo La scheda Singoli componenti e digitando WSL come termine di ricerca.
In alcune versioni di Visual Studio, il componente facoltativo è incluso per impostazione predefinita con alcuni dei carichi di lavoro .NET.
Installare WSL.
Installare la distribuzione desiderata.
Avviare il debug con WSL
Dopo aver installato i componenti necessari, aprire un'app Web ASP.NET Core o un'app console .NET Core in Visual Studio Verrà visualizzato un nuovo profilo di avvio denominato WSL:
Selezionare questo profilo per aggiungerlo al launchSettings.json.
Alcuni degli attributi chiave nel file sono illustrati nell'esempio seguente.
Nota
A partire da Visual Studio 2022 Preview 3, il nome del comando nel profilo di avvio è cambiato da 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": "" }
Dopo aver selezionato il nuovo profilo, l'estensione verifica che la distribuzione WSL sia configurata per eseguire app .NET e consente di installare eventuali dipendenze mancanti. Dopo aver installato queste dipendenze, è possibile eseguire il debug in WSL.
Avviare il debug come di consueto e l'app verrà eseguita nella distribuzione WSL predefinita.
Un modo semplice per verificare che sia in esecuzione in Linux consiste nel controllare il valore di
Environment.OSVersion
.
Nota
Solo Ubuntu e Debian sono stati testati e sono supportati. Le altre distribuzioni supportate da .NET devono funzionare, ma richiedono l'installazione manuale di .NET Runtime e Curl.
Scegliere una distribuzione specifica
Per impostazione predefinita, il profilo di avvio di WSL 2 usa la distribuzione predefinita impostata in wsl.exe. Se si vuole che il profilo di avvio sia quello di destinazione di una distribuzione specifica, indipendentemente da tale impostazione predefinita, è possibile modificare il profilo di avvio. Ad esempio, se si esegue il debug di un'app Web e si vuole testarlo in Ubuntu 20.04, il profilo di avvio sarà simile al seguente:
"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"
}
Specificare come destinazione più distribuzioni
Andando oltre, se si lavora su un'applicazione che deve essere eseguita in più distribuzioni e si vuole un modo rapido per testare ognuno di essi, è possibile avere più profili di avvio. Ad esempio, se è necessario testare l'app console in Debian, Ubuntu 18.04 e Ubuntu 20.04, è possibile usare i profili di avvio seguenti:
"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 questi profili di avvio, è possibile passare facilmente tra le distribuzioni di destinazione, senza lasciare il comfort di Visual Studio.
Connettersi a un processo WSL in esecuzione
Oltre al debug dall'avvio dell'app tramite F5, è possibile eseguire il debug collegando a un processo WSL in esecuzione usando la funzionalità di collegamento al processo.
Con l'app in esecuzione scegliere Debug>Connetti a processo.
Per Tipo di connessione scegliere sottosistema Windows per Linux (WSL) e quindi scegliere la distribuzione Linux per La destinazione connessione.
Scegliere Connetti.
Impostazioni WSL nel profilo di avvio
La tabella seguente illustra le impostazioni supportate nel profilo di avvio.
Nome | Predefiniti | Scopo | Supporta i token? |
---|---|---|---|
executablePath | dotnet | Eseguibile da eseguire | Sì |
commandLineArgs | Valore della proprietà MSBuild TargetPath mappata all'ambiente WSL | Argomenti della riga di comando passati a executablePath | Sì |
workingDirectory | Per le app console: {OutDir} Per le app Web: {ProjectDir} |
Directory di lavoro in cui avviare il debug | Sì |
environmentVariables | Coppie chiave valore delle variabili di ambiente da impostare per il processo sottoposto a debug. | Sì | |
setupScriptPath | Script da eseguire prima del debug. Utile per l'esecuzione di script come ~/.bash_profile. | Sì | |
distributionName | Nome della distribuzione WSL da usare. | No | |
launchBrowser | false | Indica se avviare o meno un browser | No |
launchUrl | URL da avviare se launchBrowser è true | No |
Token supportati:
{ProjectDir} - Percorso della directory del progetto
{OutDir} - Valore della proprietà MSBuild OutDir
Nota
Tutti i percorsi sono per WSL non Per Windows.
Passare un argomento della riga di comando
Usare l'impostazione commandLineArgs
per passare un argomento della riga di comando a WSL nel profilo di avvio.
Nell'esempio seguente si passano due argomenti a un progetto DLL denominato ConsoleApp.
"WSL": {
"commandName": "WSL",
"commandLineArgs": "\"{OutDir}/ConsoleApp.dll\" arg1 arg2"
}