web-dev-qa-db-ja.com

Linux(WSL)のWindowsサブシステムから.NET(ドットネット)コアを実行/デバッグするようにVisual Studioコードを構成するにはどうすればよいですか?

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

私のディレクトリ構造:

enter image description here

しかし、[デバッグの開始]ボタンをクリックすると、次のエラーが表示されます。

launch: program " does not exist
10
Captain Stack

主題に関する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"
           }
       }

ご注意ください:

  • /.vscode/launch.json:これは、アプリケーションの起動に使用できるさまざまな構成の配列を提供します。デバッグビューには、アクティブな構成を選択するためのドロップダウンがあります。
  • /.vscode/tasks.json:これは、アプリケーションのビルドなど、実行可能なさまざまなタスクの配列を提供します。デバッグ構成は、preLaunchTaskプロパティを介してこれらのタスクのいずれかにリンクできます。

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:\\" }
  • Linuxでは、ファイルとパスは大文字と小文字が区別されます。
4
Barr J