Condividi tramite


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 gli 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 Collega 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.

    Per verificare la presenza del componente WSL, scegliere Strumenti>Ottieni strumenti e funzionalità. Nel programma di installazione di Visual Studio, verificare 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 di preferita.

Avviare il debug con WSL

  1. 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:

    profilo di avvio WSL nell'elenco dei profili di avvio

  2. Seleziona 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.

  3. 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 dell'runtime .NET 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.

più profili di avvio WSL nell'elenco dei profili di avvio

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.

  1. Con l'app in esecuzione scegliere Debug>Collega al processo.

  2. Per il tipo di connessione , scegliere sottosistema Windows per Linux (WSL)e quindi scegliere la distribuzione Linux per la destinazione di connessione .

  3. Scegli e collega.

    Screenshot del processo WSL nella finestra di dialogo Collega al processo.

    Screenshot del processo WSL nella finestra di dialogo Collega al processo.

Impostazioni WSL nel profilo di avvio

La tabella seguente illustra le impostazioni supportate nel profilo di avvio.

Nome Predefinito Scopo Supporta i token?
executablePath dotnet Eseguibile da eseguire
commandLineArgs Valore della proprietà MSBuild TargetPath mappata all'ambiente WSL Argomenti della riga di comando passati a executablePath
workingDirectory Per le app console: {OutDir}
Per le app Web: {ProjectDir}
Directory di lavoro in cui avviare il debug
environmentVariables Coppie chiave valore delle variabili di ambiente da impostare per il processo sottoposto a debug.
setupScriptPath Script da eseguire prima del debug. Utile per l'esecuzione di script come ~/.bash_profile.
distributionName Nome della distribuzione WSL da usare. No
launchBrowser falso Indica se lanciare un browser o meno No
launchUrl URL da avviare nel caso in cui launchBrowser sia 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.

Fornire un argomento della riga di comando

Per passare un argomento della riga di comando a WSL nel profilo di avvio, utilizzare l'impostazione commandLineArgs.

Nell'esempio seguente si passano due argomenti a un progetto DLL denominato ConsoleApp.

"WSL": {
  "commandName": "WSL",
  "commandLineArgs": "\"{OutDir}/ConsoleApp.dll\" arg1 arg2"
}