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 を使用してデバッグを開始する
必要なコンポーネントをインストールしたら、Visual Studio で ASP.NET Core Web アプリまたは .NET Core コンソール アプリを開くと、WSL という名前の新しい起動プロファイルが表示されます。
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で設定されている既定のディストリビューションが使用されます。 起動プロファイルが特定のディストリビューションをターゲットにする場合は、その既定値に関係なく、起動プロファイルを変更できます。 たとえば、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 プロセスにアタッチする
F5 を使用したアプリのスタートアップからのデバッグに加えて、プロセスへのアタッチ機能を使用して実行中の WSL プロセスにアタッチすることでデバッグできます。
アプリが実行されたら、[デバッグ] >[プロセスにアタッチ]選択します。
[接続の種類]で、[Windows Subsystem for Linux (WSL)を選択し、接続ターゲットの Linux ディストリビューションを選択します。
を選択し、を添付します。
起動プロファイルの 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"
}