Поделиться через


Отладка приложений .NET в WSL с помощью Visual Studio

Вы можете легко запускать и отлаживать приложения .NET Core и .NET 5+ в Linux, не выходя из Visual Studio с помощью подсистемы Windows для Linux (WSL). Если вы являетесь кроссплатформенным разработчиком, этот метод можно использовать как простой способ тестирования больше целевых сред.

Для пользователя Windows .NET, нацеленного на запуск Linux, WSL занимает оптимальное положение между реалистичностью рабочей среды и производительностью. В Visual Studio вы уже можете выполнять отладку в удалённой среде Linux с помощью удалённого отладчикаили в контейнерах с помощью инструментов для работы с контейнерами. Когда реалистичность производства является вашей главной заботой, следует использовать один из этих вариантов. Когда простой и быстрый внутренний цикл более важен, WSL является отличным вариантом.

Вам не нужно выбирать только один метод! Вы можете иметь профиль запуска для Docker и WSL в одном проекте и выбрать подходящий для конкретного запуска. После развертывания приложения вы всегда можете использовать удаленный отладчик для подключения к нему, если возникла проблема. Сведения об отладке контейнера Docker Linux, работающего в WSL, см. в статье Присоединение к процессу, выполняемму в контейнере Docker.

Заметка

Начиная с Visual Studio 2019 версии 16.11 Preview 3, целевой объект отладки WSL 2 был переименован в WSL.

Необходимые условия

  • Visual Studio 2019 версии 16.9 предварительная версия 1 или более поздние версии с опциональным компонентом отладки .NET и дополнительным компонентом WSL.

    Чтобы проверить наличие компонента WSL, выберите Tools>Get Tools and Features. В установщике Visual Studio убедитесь, что компонент установлен, выбрав отдельные компоненты вкладку и введя WSL в качестве условия поиска.

    В некоторых версиях Visual Studio необязательный компонент включен по умолчанию с некоторыми рабочими нагрузками .NET.

  • Установите WSL.

  • Установите дистрибутив по вашему выбору.

Запуск отладки с помощью WSL

  1. После установки необходимых компонентов откройте консольное приложение ASP.NET Core или консольное приложение .NET Core в Visual Studio Вы увидите новый профиль запуска с именем WSL:

    профиль запуска WSL в списке профилей запуска

  2. Выберите этот профиль, чтобы добавить его в launchSettings.json.

    Некоторые ключевые атрибуты в файле показаны в следующем примере.

    Заметка

    Начиная с Visual Studio 2022 Preview 3 имя команды в профиле запуска изменилось с WSL2 на 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": ""
    }
    

    Выбрав новый профиль, расширение проверяет, настроен ли дистрибутив WSL для запуска приложений .NET и помогает установить отсутствующие зависимости. После установки этих зависимостей можно будет выполнить отладку в WSL.

  3. Запустите отладку как обычное, и приложение будет работать в дистрибутиве WSL по умолчанию.

    Простой способ проверить, работает ли вы в Linux, — проверить значение Environment.OSVersion.

Заметка

Поддерживаются и протестированы только Ubuntu и Debian. Другие дистрибутивы, поддерживаемые .NET, должны работать, но требуют вручную установки среды выполнения .NET и Curl.

Выбор конкретного дистрибутива

По умолчанию профиль запуска WSL 2 использует распределение по умолчанию в wsl.exe. Если вы хотите, чтобы профиль запуска предназначен для конкретного дистрибутива независимо от этого по умолчанию, можно изменить профиль запуска. Например, если вы отладили веб-приложение и хотите протестировать его в Ubuntu 20.04, профиль запуска будет выглядеть следующим образом:

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

Ориентироваться на несколько дистрибутивов

Если вы работаете над приложением, которое должно выполняться в нескольких дистрибутивах, и вы хотите быстро протестировать их, вы можете иметь несколько профилей запуска. Например, если вам нужно протестировать консольное приложение в Debian, Ubuntu 18.04 и Ubuntu 20.04, можно использовать следующие профили запуска:

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

С помощью этих профилей запуска вы можете легко переключаться между целевыми дистрибутивами без удобства Visual Studio.

несколько профилей запуска WSL в списке профилей запуска

Присоединитесь к работающему процессу WSL

Помимо отладки при запуске приложения с помощью F5, можно выполнить отладку, подключившись к работающему процессу WSL, используя функцию подключения к процессу.

  1. При запуске приложения выберите Отладка>подключиться к процессу.

  2. Для типа подключения выберите подсистему Windows для Linux (WSL) , а затем выберите дистрибутив Linux для целевой системы подключения .

  3. Выберите Прикрепить.

    снимок экрана процесса WSL в диалоговом окне присоединения к процессу.

    снимок экрана процесса WSL в диалоговом окне подключения к процессу.

Параметры WSL в профиле запуска

В следующей таблице показаны параметры, поддерживаемые в профиле запуска.

Имя По умолчанию Цель Поддерживает токены?
исполнимыйПуть dotnet Исполняемый файл для запуска Да
аргументы командной строки Значение свойства MSBuild TargetPath, сопоставленное с средой WSL Аргументы командной строки, переданные в путь исполняемого файла Да
workingDirectory Для консольных приложений: {OutDir}
Для веб-приложений: {ProjectDir}
Рабочий каталог, в котором начинается отладка Да
переменные окружения Пары «ключ-значение» переменных среды, которые нужно задать для отлаживаемого процесса. Да
setupScriptPath Скрипт для запуска перед отладкой. Полезно для выполнения сценариев, таких как ~/.bash_profile. Да
имя_распределения Имя используемого дистрибутива WSL. Нет
запуститьБраузер ложный Запуск браузера или нет Нет
launchUrl URL-адрес для запуска, если launchBrowser имеет значение true Нет

Поддерживаемые маркеры:

{ProjectDir} — путь к каталогу проекта

{OutDir} — значение свойства MSBuild OutDir

Заметка

Все пути предназначены для WSL, а не для Windows.

Передача аргумента командной строки

Используйте параметр commandLineArgs для передачи аргумента командной строки в WSL в профиле запуска.

В следующем примере вы передаете два аргумента в проект DLL с именем ConsoleApp.

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