次の方法で共有


Visual Studio を使用して WSL で .NET アプリをデバッグする

Windows Subsystem for Linux (WSL) を使用して Visual Studio を終了することなく、Linux で .NET Core および .NET 5 以降のアプリを簡単に実行およびデバッグできます。 クロスプラットフォーム開発者の場合は、このメソッドを簡単な方法として使用して、より多くのターゲット環境をテストできます。

Linux をターゲットとする Windows .NET ユーザーの場合、WSL は運用環境のリアリズムと生産性の間の甘い場所に住んでいます。 Visual Studio では、リモート デバッガーを使用してリモート Linux 環境でデバッグすることも、Container Toolsを使用してコンテナーを使用してデバッグすることもできます。 運用環境のリアリズムが主な関心事項である場合は、これらのオプションのいずれかを使用する必要があります。 簡単で高速な内部ループがより重要な場合、WSL は優れたオプションです。

1 つの方法だけを選択する必要はありません。 同じプロジェクトに Docker と WSL の起動プロファイルを設定し、特定の実行に適した起動プロファイルを選択できます。 また、アプリがデプロイされたら、問題が発生した場合は、いつでもリモート デバッガーを使用してアタッチできます。 WSL で実行されている Linux Docker コンテナーをデバッグするには、「Docker コンテナーで実行されているプロセスにアタッチする」を参照してください。

手記

Visual Studio 2019 バージョン 16.11 Preview 3 以降、WSL 2 デバッグ ターゲットの名前が WSL に変更されました。

前提 条件

  • Visual Studio 2019 v16.9 Preview 1 以降のバージョンと、WSL オプション コンポーネントを使用した .NET デバッグ。

    WSL コンポーネントを確認するには、[ツール] [ツール]>[ツールと機能の取得]を選択します。 Visual Studio インストーラーで、[個々のコンポーネント ] タブ 選択し、検索語句として「WSL 入力して、コンポーネントがインストールされていることを確認します。

    一部のバージョンの Visual Studio では、オプション コンポーネントは既定で一部の .NET ワークロードに含まれています。

  • WSLをインストールします。

  • 選択した 配布 をインストールします。

WSL を使用してデバッグを開始する

  1. 必要なコンポーネントをインストールしたら、Visual Studio で ASP.NET Core Web アプリまたは .NET Core コンソール アプリを開くと、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で設定されている既定のディストリビューションが使用されます。 起動プロファイルが特定のディストリビューションをターゲットにする場合は、その既定値に関係なく、起動プロファイルを変更できます。 たとえば、Web アプリをデバッグしていて、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"
}

複数のディストリビューションを対象とする

さらに 1 歩進んで、複数のディストリビューションで実行する必要があるアプリケーションで作業していて、それぞれのディストリビューションを簡単にテストする方法が必要な場合は、複数の起動プロファイルを使用できます。 たとえば、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 起動プロファイル

実行中の WSL プロセスにアタッチする

F5 を使用したアプリのスタートアップからのデバッグに加えて、プロセスへのアタッチ機能を使用して実行中の WSL プロセスにアタッチすることでデバッグできます。

  1. アプリが実行されたら、[デバッグ] >[プロセスにアタッチ]選択します。

  2. [接続の種類]で、[Windows Subsystem for Linux (WSL)を選択し、接続ターゲットの Linux ディストリビューションを選択します。

  3. を選択し、を添付します。

    [プロセスへのアタッチ] ダイアログ ボックスの WSL プロセスのスクリーンショット。

    [プロセスへのアタッチ] ダイアログ ボックスの WSL プロセスのスクリーンショット。

起動プロファイルの WSL 設定

次の表は、起動プロファイルでサポートされている設定を示しています。

名前 既定値 目的 トークンをサポートしていますか?
executablePath dotnet 実行する実行可能ファイル はい
commandLineArgs WSL 環境にマップされた MSBuild プロパティ TargetPath の値 executablePath に渡されるコマンド ライン引数 はい
作業ディレクトリ (workingDirectory) コンソール アプリの場合: {OutDir}
Web アプリの場合: {ProjectDir}
デバッグを開始する作業ディレクトリ はい
環境変数 デバッグされたプロセスに設定する環境変数のキー値ペア。 はい
setupScriptPath デバッグ前に実行するスクリプト。 ~/.bash_profile などのスクリプトを実行する場合に便利です。 はい
配布名 使用する WSL ディストリビューションの名前。 いいえ
ブラウザーを起動 false ブラウザーを起動するかどうか いいえ
launchUrl launchBrowser が true の場合に起動する URL いいえ

サポートされているトークン:

{ProjectDir} - プロジェクト ディレクトリへのパス

{OutDir} - MSBuild プロパティの値 OutDir

手記

すべてのパスは、Windows ではなく WSL 用です。

コマンド ライン引数を渡す

commandLineArgs 設定を使用して、起動プロファイルの WSL にコマンド ライン引数を渡します。

次の例では、ConsoleApp という名前の DLL プロジェクトに 2 つの引数を渡します。

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