Udostępnij za pośrednictwem


Debugowanie aplikacji .NET w programie WSL za pomocą programu Visual Studio

Możesz łatwo uruchamiać i debugować aplikacje .NET Core i .NET 5+ w systemie Linux bez opuszczania programu Visual Studio przy użyciu programu WSL. Jeśli jesteś deweloperem międzyplatformowym, możesz użyć tej metody jako prostego sposobu testowania większej liczby środowisk docelowych.

W przypadku użytkownika platformy .NET systemu Windows przeznaczonego dla systemu Linux system WSL mieszka w słodkim miejscu między realizmem produkcyjnym a produktywnością. W programie Visual Studio można już debugować w zdalnym środowisku systemu Linux przy użyciu zdalnego debugera lub kontenerów przy użyciu narzędzi kontenerów. Gdy realizm produkcji jest twoim głównym problemem, należy użyć jednej z tych opcji. Gdy łatwa i szybka pętla wewnętrzna jest ważniejsza, WSL jest doskonałym rozwiązaniem.

Nie musisz wybierać tylko jednej metody! W tym samym projekcie można mieć profil uruchamiania dla platform Docker i WSL i wybrać odpowiedni dla określonego uruchomienia. Po wdrożeniu aplikacji zawsze możesz użyć zdalnego debugera, aby dołączyć go, jeśli wystąpi problem.

Uwaga

Począwszy od programu Visual Studio 2019 w wersji 16.11 (wersja zapoznawcza 3), nazwa celu debugowania WSL 2 została zmieniona na WSL.

Wymagania wstępne

  • Program Visual Studio 2019 w wersji 16.9 (wersja zapoznawcza 1 lub nowsza) z opcjonalnym składnikiem debugowania platformy .NET za pomocą programu WSL.

    Aby sprawdzić składnik WSL, wybierz pozycję Narzędzia Pobierz narzędzia>i funkcje. W Instalator programu Visual Studio upewnij się, że składnik jest zainstalowany, wybierając kartę Poszczególne składniki i wpisując WSL jako termin wyszukiwania.

    W niektórych wersjach programu Visual Studio składnik opcjonalny jest domyślnie dołączany do niektórych obciążeń platformy .NET.

  • Zainstaluj program WSL.

  • Zainstaluj wybraną dystrybucję.

Rozpoczynanie debugowania przy użyciu protokołu WSL

  1. Po zainstalowaniu wymaganych składników otwórz aplikację internetową platformy ASP.NET Core lub aplikację konsolową platformy .NET Core w programie Visual Studio Zobaczysz nowy profil uruchamiania o nazwie WSL:

    Profil uruchamiania programu WSL na liście profilów uruchamiania

  2. Wybierz ten profil, aby dodać go do launchSettings.json.

    Niektóre atrybuty klucza w pliku są pokazane w poniższym przykładzie.

    Uwaga

    Począwszy od programu Visual Studio 2022 (wersja zapoznawcza 3), nazwa polecenia w profilu uruchamiania została zmieniona z WSL2 na 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": ""
    }
    

    Po wybraniu nowego profilu rozszerzenie sprawdza, czy dystrybucja WSL jest skonfigurowana do uruchamiania aplikacji platformy .NET i pomaga zainstalować wszelkie brakujące zależności. Po zainstalowaniu tych zależności możesz przystąpić do debugowania w programie WSL.

  3. Rozpocznij debugowanie w zwykły sposób, a aplikacja zostanie uruchomiona w domyślnej dystrybucji WSL.

    Łatwym sposobem sprawdzenia, czy działasz w systemie Linux, jest sprawdzenie wartości Environment.OSVersion.

Uwaga

Tylko systemy Ubuntu i Debian zostały przetestowane i są obsługiwane. Inne dystrybucje obsługiwane przez platformę .NET powinny działać, ale wymagają ręcznego zainstalowania środowiska uruchomieniowego platformy .NET i programu Curl.

Wybierz określoną dystrybucję

Domyślnie profil uruchamiania programu WSL 2 używa domyślnej dystrybucji ustawionej w wsl.exe. Jeśli chcesz, aby profil uruchamiania był przeznaczony dla określonej dystrybucji, niezależnie od tego domyślnego, możesz zmodyfikować profil uruchamiania. Jeśli na przykład debugujesz aplikację internetową i chcesz ją przetestować w systemie Ubuntu 20.04, profil uruchamiania będzie wyglądać następująco:

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

Określanie wielu dystrybucji docelowych

Jeśli pracujesz nad aplikacją, która musi działać w wielu dystrybucjach i chcesz szybko przetestować poszczególne z nich, możesz mieć wiele profilów uruchamiania. Jeśli na przykład musisz przetestować aplikację konsolową w systemach Debian, Ubuntu 18.04 i Ubuntu 20.04, możesz użyć następujących profilów uruchamiania:

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

Dzięki tym profilom uruchamiania można łatwo przełączać się między dystrybucjami docelowymi, a wszystko to bez opuszczania komfortu programu Visual Studio.

Wiele profilów uruchamiania protokołu WSL na liście profilów uruchamiania

Dołączanie do uruchomionego procesu WSL

Oprócz debugowania z uruchamiania aplikacji przy użyciu F5 można debugować, dołączając do uruchomionego procesu WSL przy użyciu funkcji dołączania do procesu.

  1. Po uruchomieniu aplikacji wybierz pozycję Debuguj>dołączanie do procesu.

  2. W polu Typ połączenia wybierz pozycję Podsystem Windows dla systemu Linux (WSL), a następnie wybierz dystrybucję systemu Linux dla elementu docelowego połączenia.

  3. Wybierz pozycję Dołącz.

    Zrzut ekranu przedstawiający proces WSL w oknie dialogowym dołączania do procesu.

    Zrzut ekranu przedstawiający proces WSL w oknie dialogowym dołączania do procesu.

Ustawienia programu WSL w profilu uruchamiania

W poniższej tabeli przedstawiono ustawienia obsługiwane w profilu uruchamiania.

Nazwisko Wartość domyślna Purpose Czy obsługuje tokeny?
plik wykonywalnyPath dotnet Plik wykonywalny do uruchomienia Tak
commandLineArgs Wartość właściwości MSBuild TargetPath zamapowana na środowisko WSL Argumenty wiersza polecenia przekazane do pliku wykonywalnegoPath Tak
workingDirectory W przypadku aplikacji konsolowych: {OutDir}
Dla aplikacji internetowych: {ProjectDir}
Katalog roboczy, w którym należy rozpocząć debugowanie Tak
environmentVariables Pary klucz wartość zmiennych środowiskowych do ustawienia dla debugowanego procesu. Tak
setupScriptPath Skrypt do uruchomienia przed debugowaniem. Przydatne do uruchamiania skryptów, takich jak ~/.bash_profile. Tak
distributionName Nazwa dystrybucji WSL do użycia. Nie.
launchBrowser fałsz Czy należy uruchomić przeglądarkę Nie.
launchUrl Adres URL do uruchomienia, jeśli launchBrowser ma wartość true Nie.

Obsługiwane tokeny:

{ProjectDir} — ścieżka do katalogu projektu

{OutDir} — wartość właściwości MSBuild OutDir

Uwaga

Wszystkie ścieżki są przeznaczone dla systemu WSL, a nie systemu Windows.

Przekazywanie argumentu wiersza polecenia

Użyj ustawienia , commandLineArgs aby przekazać argument wiersza polecenia do programu WSL w profilu uruchamiania.

W poniższym przykładzie przekazujesz dwa argumenty do projektu DLL o nazwie ConsoleApp.

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