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

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

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

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

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>Connetti a processo.

  2. Per Tipo di connessione scegliere sottosistema Windows per Linux (WSL) e quindi scegliere la distribuzione Linux per La destinazione connessione.

  3. Scegliere Connetti.

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

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

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
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 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"
}