Linux用Windowsサブシステム(WSL)にdotnet core 2.2をインストールし、新しいプロジェクトを作成しました。 Visual Studio CodeのC#拡張機能もインストールしました。構文の強調表示と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
主題に関するgithubの素晴らしい記事があります- Linux用Windowsサブシステム 。
長い話を短くするには、Windows 10の作成者が更新した後、最初にバージョンを確認する必要があります。
~$ cat /etc/os-release | grep -i version
VERSION="16.04.2 LTS (Xenial Xerus)"
VERSION_ID="16.04"
VERSION_CODENAME=xenial
次のことに注意してください:
Windows Creators更新プログラムにアップグレードし、既にWSLがインストールされている場合、WSLにUbuntu 14が残っている可能性があります。バージョンが14の場合、cmdプロンプトで次のコマンドを実行して、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設定のサンプルlaunch:
{
"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デバッガーを指します。
これは、コンソールから読み取りたいプログラムをサポートしません。
attachのサンプル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:\\" }