Отладка приложений .NET в WSL с помощью Visual Studio
Вы можете легко запускать и отлаживать приложения .NET Core и .NET 5+ в Linux, не выходя из Visual Studio с помощью подсистема Windows для Linux (WSL). Если вы разрабатываете кросс-платформенные приложения, этот метод предоставляет простой способ тестировать большинство целевых сред.
Для пользователей Windows .NET, разрабатывающих приложения для Linux, WSL 2 — это оптимальное сочетание реалистичной рабочей среды и высокой производительности. В Visual Studio вы уже можете выполнять отладку в удаленной среде Linux, используя удаленный отладчик или контейнеры с помощью соответствующих средств. Эти варианты подойдут, если больше всего необходимо достичь реалистичных условий. Когда более важен простой и быстрый внутренний цикл, WSL является отличным вариантом.
Вам не нужно выбирать только один метод! У вас может быть профиль запуска для Docker и WSL в одном проекте, и вы можете выбрать тот, который подходит для конкретного типа запуска. После развертывания приложения всегда можно подключить удаленный отладчик в случае возникновения проблемы. Сведения об отладке контейнера Docker Linux, работающего в WSL, см. в разделе "Присоединение к процессу" в контейнере Docker.
Примечание.
Начиная с 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
После установки необходимых компонентов откройте консольное приложение ASP.NET Core или консольное приложение .NET Core в Visual Studio Вы увидите новый профиль запуска с именем WSL:
Выберите этот профиль, чтобы добавить его в файл 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.
Запустите отладку привычным способом, и ваше приложение будет работать в вашем распространении 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
Помимо отладки при запуске приложения с помощью клавиши F5, можно выполнить отладку, подключившись к выполняемому процессу WSL с помощью функции подключения к процессу.
После запуска приложения выберите Отладка>Подключить к процессу.
В поле Тип подключения выберите Подсистема Windows для Linux (WSL), а затем в поле Цель подключения выберите дистрибутив Linux.
Выберите Присоединиться.
Параметры 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"
}