Я установил .NET Core 2.2 в Подсистема Windows для Linux (WSL) и создал новый проект. Я также установил расширение C# для Visual Studio Code, и подсветка синтаксиса и IntelliSense, похоже, работают.
Однако, когда я пытаюсь использовать отладчик, все перестает работать. Вот пошаговое описание того, что я пытался сделать, чтобы его настроить.
Вот мой файл launch.json:
{
// Use IntelliSense to learn about possible attributes.
// Hover to view descriptions of existing attributes.
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": ".NET Core Launch (console)",
"type": "coreclr",
"request": "launch",
"preLaunchTask": "build",
"program": "${workspaceFolder}/bin/Debug/netcoreapp2.2/CodeCore.dll",
"args": [],
"cwd": "${workspaceFolder}",
"console": "internalConsole",
"stopAtEntry": false,
"internalConsoleOptions": "openOnSessionStart"
},
{
"name": ".NET Core Launch (web)",
"type": "coreclr",
"request": "launch",
"preLaunchTask": "build",
"program": "${workspaceFolder}/bin/Debug/netcoreapp2.2/CodeCore.dll",
"args": [],
"cwd": "${workspaceFolder}",
"stopAtEntry": false,
"internalConsoleOptions": "openOnSessionStart",
"launchBrowser": {
"enabled": true,
"args": "${auto-detect-url}",
"windows": {
"command": "cmd.exe",
"args": "/C start ${auto-detect-url}"
},
"osx": {
"command": "open"
},
"linux": {
"command": "xdg-open"
}
},
"env": {
"ASPNETCORE_ENVIRONMENT": "Development"
},
"sourceFileMap": {
"/Views": "${workspaceFolder}/Views"
}
},
{
"name": ".NET Core Attach",
"type": "coreclr",
"request": "attach",
"processId": "${command:pickProcess}"
}
]
}
И мой файл tasks.json:
{
// See https://go.microsoft.com/fwlink/?LinkId=733558
// for the documentation about the tasks.json format
"version": "2.0.0",
"tasks": [
{
"label": "build",
"command": "dotnet build",
"type": "shell",
"group": "build",
"presentation": {
"reveal": "silent"
},
"problemMatcher": "$msCompile"
}
]
}
Моя структура каталогов:
Но когда я нажимаю кнопку «Начать отладку», я получаю следующую ошибку:
launch: program " does not exist
Конечно, я могу это сделать, но они были добавлены VS Code, который сгенерировал базу для этих файлов json. Я скептически отношусь к этому.





На GitHub есть отличная статья на эту тему - Подсистема Windows для Linux.
Короче говоря, вам нужно сначала проверить свою версию после Windows 10 Creators Update:
~$ cat /etc/os-release | grep -i version
VERSION = "16.04.2 LTS (Xenial Xerus)"
VERSION_ID = "16.04"
VERSION_CODENAME=xenial
Обратите внимание на следующее:
If you had upgraded to Windows Creators update and already had WSL installed, you might still have Ubuntu 14 in the WSL. If the version is 14, run the following commands in a cmd prompt to reinstall and update WSL.
lxrun /uninstall /full
lxrun /install
Скачайте отладчик:
sudo apt-get install unzip
curl -sSL https://aka.ms/getvsdbgsh | bash /dev/stdin -v latest -l ~/vsdbg
Отладчик будет установлен на ~/vsdbg/vsdbg. Это debuggerPath.
Пример конфигурации launch.json для запуска:
{
"name": ".NET Core WSL Launch",
"type": "coreclr",
"request": "launch",
"preLaunchTask": "publish",
"program": "/mnt/c/temp/dotnetapps/wslApp/bin/publish/wslApp.dll",
"args": [],
"cwd": "/mnt/c/temp/dotnetapps/wslApp",
"stopAtEntry": false,
"console": "internalConsole",
"pipeTransport": {
"pipeCwd": "${workspaceRoot}",
"pipeProgram": "bash.exe",
"pipeArgs": [ "-c" ],
"debuggerPath": "~/vsdbg/vsdbg"
}
}
Пожалуйста, обрати внимание:
Пример задачи "опубликовать" дляtasks.json(необходимо для запуска):
{
"version": "2.0.0",
"tasks": [
...,
{
"label": "publish",
"command": "dotnet",
"type": "process",
"args": [
"publish",
"${workspaceFolder}/wslApp.csproj",
"-o",
"${workspaceFolder}/bin/publish"
]
}
]
}
Пожалуйста, обрати внимание:
preLaunchTask выполняет dotnet publish, который строит проект в Windows. Поскольку coreclr является кроссплатформенным, двоичный файл может быть выполнен на WSL без каких-либо дополнительных действий.
pipeProgram установлен на bash.exe.
debuggerPath указывает на vsdbg, отладчик coreclr.
Это не будет поддерживать программы, которые хотят читать с консоли.
Пример конфигурации launch.json для прикрепления:
{
"name": ".NET Core WSL Attach",
"type": "coreclr",
"request": "attach",
"processId": "${command:pickRemoteProcess}",
"pipeTransport": {
"pipeCwd": "${workspaceRoot}",
"pipeProgram": "bash.exe",
"pipeArgs": [ "-c" ],
"debuggerPath": "~/vsdbg/vsdbg",
"quoteArgs": true
}
}
Пожалуйста, обрати внимание:
"processId": "${command:pickRemoteProcess}" перечисляет процессы, запущенные на WSL с помощью программы конвейера.quoteArgs будет заключать все аргументы и команды отладчика в кавычки с пробелами, если установлено значение true.sourceFileMap для сопоставления источников, если они доступны в
другое место, чем то, где они были построены. Если вы построите свой
проект в Linux, обязательно добавьте карту с привода /mnt
буквы. Пример: "sourceFileMap": { "/mnt/c/": "c:\\" }lxrun.exe недоступен в последних выпусках Windows 10. Используйте wslconfig.exe /uninstall distro-name.
Отличная помощь, спасибо, есть ли способ избавиться от жестко запрограммированного /mnt/c/temp/dotnetapps/wslApp и заменить его переменной или специальной командой vscode?
У вас есть комментарии ВНУТРИ вашего json, обычно это не лучшая идея. Вы можете удалить их и попробовать?