GNU/Linux >> Linux の 問題 >  >> Linux

Windows 上の Visual Studio から WSL2 で .NET Core Linux アプリをリモート デバッグする

Visual Studio Code と WSL (Linux 用 Windows サブシステム) を使用すると、実際の Linux 環境で "コード" を実行できます。 Linux プロンプトから実行すると、Visual Studio Code が Windows で起動し、実質的に半分に分割されます。 VSCode サーバーは Linux で実行され、Windows が VS Code インスタンスを実行している間、言語サービス、デバッガーなどを管理します。 VS Code を使用して、SSH を介してリモート マシンで開発することもでき、うまく機能します。実際、ここでチェックアウトする一連のリモート チュートリアルがあります。

VS Code は優れたコード エディターですが、完全な IDE (統合開発環境) ではないため、Windows (または Mac) で Visual Studio を使用して楽しむ理由はまだたくさんあります。

WSL と Visual Studio (Code ではありません) を使用して「リモート」デバッグを実行できるかどうかを確認したかったのですが、もしそうなら、読者の皆さん、興味はありますか?

  • まず、Windows 10 マシンに WSL (特に WSL2) をインストールしました。追加するだけで、「Windows の機能」から Windows で今すぐ WSL1 を取得できます。現在、Windows Insider の「Slow Ring」で WSL2 を入手できます。
  • それでは、新しい Windows ターミナルを入手しました。これには必要ありませんが、コマンドラインが好きなら素晴らしいです。
  • 私は Visual Studio 2019 コミュニティを持っています

また、プラットフォームと選択した言語に C# で .NET Core を使用しています。 WindowsのUbuntu 18.04内に https://dot.net/ からインストールしました。 Web アプリ (dotnet new razor ) は現在、Linux でうまく動作します。

ターミナル内の WSL プロンプトから、「explorer.exe」を実行できます。パス \\wsl$\Ubuntu-18.04\home\scott\remotewebapp で Windows エクスプローラーを起動しますが、VS には現在、このネットワーク境界を越えてプロジェクトを開く際に問題があります。代わりに、自分のものを c:\temp\remotewebapp に置き、Linux から /mnt/c/temp/remotewebapp としてアクセスします。

完璧な世界では、これは将来の憶測/ブレインストーミングです。Visual Studio は、Linux パスからプロジェクトを開いたときにそれを検出し、"Do The Right Thing(tm)" を実行します。

まず、VSDbg が WSL/Linux にインストールされていることを確認する必要があります。これは VS Code で自動的に行われますが、次のように 1 行で手動で行います:

curl -sSL https://aka.ms/getvsdbgsh | /bin/sh /dev/stdin -v latest -l ~/vsdbg

プロジェクトを起動し、デバッガーでプロジェクトにアタッチし、いつ開始されたかを通知するのに十分な情報を含む launch.json ファイルが必要です。 VS Code がこれを作成します。将来的には、Visual Studio もコンテキストを検出し、このファイルを生成する予定です。これが私のものです。プロジェクト フォルダーの .vs/launch.json に入れました。

VS は launch.json も作成しますが、ここにあるように、2 つの最も重要な部分である $adapter と $adapterArgs 部分を追加する必要があります。

{
// Use IntelliSense to find out which attributes exist for C# debugging
// Use hover for the description of the existing attributes
// For further information visit https://github.com/OmniSharp/omnisharp-vscode/blob/master/debugger-launchjson.md
"version": "0.2.0",
"configurations": [
{
"$adapter": "C:\\windows\\sysnative\\bash.exe",
"$adapterArgs": "-c ~/vsdbg/vsdbg",
"name": ".NET Core Launch (web)",
"type": "coreclr",
"request": "launch",
"preLaunchTask": "build",
// If you have changed target frameworks, make sure to update the program path.
"program": "/mnt/c/temp/remotewebapp/bin/Debug/netcoreapp3.0/remotewebapp.dll",
"args": [],
"cwd": "/mnt/c/temp/remotewebapp",
"stopAtEntry": false,
// Enable launching a web browser when ASP.NET Core starts. For more information: https://aka.ms/VSCode-CS-LaunchJson-WebBrowser
"serverReadyAction": {
"action": "openExternally",
"pattern": "^\\s*Now listening on:\\s+(https?://\\S+)"
},
"env": {
"ASPNETCORE_ENVIRONMENT": "Development"
},
"sourceFileMap": {
"/Views": "${workspaceFolder}/Views"
},
"pipeTransport": {
"pipeCwd": "${workspaceRoot}",
"pipeProgram": "bash.exe",
"pipeArgs": [ "-c" ],
"debuggerPath": "~/vsdbg/vsdbg"
},
"logging": { "engineLogging": true }
}
]
}

これらの launch.json ファイルは、VS や VS Code などで使用され、システムとデバッガーが十分に機能します。この次のステップを自動化し、「デバッグの開始」のようなボタンにアタッチする方法を私が知っている方法はありません-これはVSの新しい作業です-しかし、「コマンドウィンドウ」からVS2019自動化コマンドを呼び出すことで、このように開始できますView |でアクセスできます。その他のウィンドウ |コマンド ウィンドウ、または Ctrl-Alt-A。

コマンド ウィンドウにこれを 1 回入力したら、上矢印キーを押して履歴からコマンドを取得し、Enter キーを押すだけで、次のデバッグ セッションを開始できます。繰り返しますが、完璧ではありませんが、開始です。

DebugAdapterHost.Launch /LaunchJson:C:\temp\remotewebapp\.vs\launch.json  

これは、Windows Visual Studio 2019 から WSL の下で Linux で実行されている .NET Core アプリをデバッグしている私のスクリーンショットです。

この作業を手伝ってくれた Andy Sterland に感謝します。

したがって、それは可能ですが、ログから自動的に落ちるわけではありません。このセットアップと準備は自動化する必要がありますか? Visual Studio (Code ではなく) からの WSL での開発は、あなたが望むものですか?コンテナー内での Docker 開発には、対話型のデバッグを含む優れたサポートがすでにありますが、これはどこに当てはまりますか?これは何かを追加しますか、それともより便利ですか? VS Code でできるように、VS 内で WSL アプリの "F5" デバッグを行いますか?

<主催者>

スポンサー: C#のような?私たちもそうです!そのため、高速でスマートなクロスプラットフォームの .NET IDE を開発しました。これにより、さらに強力なコーディングが可能になります。巧妙なコード分析、豊富なコード補完、即時の検索とナビゲーション、高度なデバッガー... JetBrains Rider を使用すると、必要なものすべてをすぐに利用できます。 Linux、Mac、または Windows で、思考の速度で C# をコーディングします。 JetBrains Rider を今すぐお試しください!


Linux
  1. XRDPを使用してWindowsからLinuxデスクトップにデスクトップをリモート接続する方法

  2. C#(.NETコア)を使用して、LinuxからWindows共有にファイルをコピーします

  3. Windows PC からリモート Linux サーバーに rsync を使用する方法は?

  1. Osx、Linux、WindowsからリモートOsxシステムにアクセスしますか?

  2. Linux の Visual Basic .Net

  3. Visual Basic は Linux 上の .NET Core でサポートされていますか?

  1. LinuxでのVisualStudioCode(VSC)の使用を開始する

  2. LinuxにMicrosoftVisualStudioCodeをインストールする

  3. Linux で Windows Visual C++ コードをコンパイルする方法