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

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

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

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

Примечание.

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

Необходимые компоненты

  • Visual Studio 2019 v16.9 Preview 1 или более поздние версии с отладкой .NET с дополнительным компонентом WSL.

    Чтобы проверить наличие компонента WSL, выберите Сервис>Получить средства и компоненты. В Visual Studio Installer убедитесь, что компонент установлен, выбрав вкладку Отдельные компоненты и введя 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 в профиле запуска

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

Имя. По умолчанию. Характер использования Поддержка маркеров
executablePath dotnet Путь к исполняемому файлу, который следует запустить. Да
commandLineArgs Значение свойства "TargetPath" MSBuild, сопоставленное со средой WSL. Аргументы командной строки, переданные согласно параметру executablePath. Да
WorkingDirectory Для консольных приложений: {OutDir}
Для веб-приложений: {ProjectDir}
Рабочий каталог, в котором следует запустить отладку. Да
environmentVariables Пары "ключ — значение" переменных среды, которые необходимо установить для отлаживаемого процесса. Да
setupScriptPath Скрипт, который следует запустить перед отладкой. Используется для выполнения таких скриптов, как ~/.bash_profile. Да
distributionName Имя дистрибутива WSL, который следует использовать. No
launchBrowser false Указывает, следует ли запускать браузер. No
launchUrl URL-адрес для запуска, если launchBrowser имеет значение true No

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

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

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

Примечание.

Все пути указываются для WSL, а не для Windows.

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

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

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

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