GNU/Linux >> Belajar Linux >  >> Linux

Debugging jarak jauh aplikasi .NET Core Linux di WSL2 dari Visual Studio di Windows

Dengan Visual Studio Code dan WSL (Windows Subsystem for Linux) Anda dapat berada di lingkungan Linux yang sebenarnya dan menjalankan "code ." dari prompt Linux dan Visual Studio Code akan diluncurkan di Windows dan secara efektif dibagi dua. VSCode-Server akan berjalan di Linux dan mengelola Layanan Bahasa, Debugger, dll, sementara Windows menjalankan instance VS Code Anda. Anda dapat menggunakan Kode VS untuk mengembangkan pada mesin jarak jauh melalui SSH juga dan itu berfungsi dengan baik. Sebenarnya ada serangkaian Tutorial Jarak Jauh untuk dilihat di sini.

VS Code adalah Editor Kode yang hebat tetapi ini bukan IDE (Lingkungan Pengembangan Terpadu) lengkap sehingga masih ada banyak alasan bagi saya untuk menggunakan dan menikmati Visual Studio di Windows (atau Mac).

Saya ingin melihat apakah mungkin untuk melakukan debugging 'jarak jauh' dengan WSL dan Visual Studio (bukan Kode) dan jika demikian, apakah ini sesuatu yang ANDA minati, Pembaca yang Terhormat.

  • Untuk memulai, saya memiliki WSL (khususnya WSL2) di mesin Windows 10 saya. Anda bisa mendapatkan WSL1 hari ini di Windows dari "fitur windows" hanya dengan menambahkannya. Anda bisa mendapatkan WSL2 hari ini di Windows Insiders "Slow Ring."
  • Lalu saya mendapatkan Terminal Windows baru. Tidak diperlukan untuk ini, tetapi luar biasa jika Anda menyukai baris perintah.
  • Saya memiliki Komunitas Visual Studio 2019

Saya juga menggunakan .NET Core dengan C# untuk platform dan bahasa pilihan saya. Saya telah menginstal dari https://dot.net/ di dalam Ubuntu 18.04, di bawah Windows. Saya memiliki aplikasi web (dotnet new razor ) yang berjalan dengan baik di Linux sekarang.

Dari prompt WSL di dalam terminal, saya dapat menjalankan "explorer.exe ." dan itu akan meluncurkan Windows Explorer di jalur \\wsl$\Ubuntu-18.04\home\scott\remotewebapp, tetapi VS saat ini memiliki beberapa masalah saat membuka proyek melintasi batas jaringan ini. Saya akan meletakkan barang-barang saya di c:\temp\remotewebapp dan mengaksesnya dari Linux sebagai /mnt/c/temp/remotewebapp.

Di dunia yang sempurna - ini adalah spekulasi/brainstorming di masa depan, Visual Studio akan mendeteksi ketika Anda membuka proyek dari jalur Linux dan "Lakukan Hal yang Benar(tm)."

Saya harus memastikan VSDbg diinstal di WSL/Linux terlebih dahulu. Itu dilakukan secara otomatis dengan Kode VS tetapi saya akan melakukannya secara manual dalam satu baris seperti ini:

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

Kita akan membutuhkan file launch.json dengan informasi yang cukup untuk meluncurkan proyek, melampirkannya dengan debugger, dan memperhatikan saat semuanya telah dimulai. Kode VS akan membuat ini untuk Anda. Dalam beberapa teori masa depan Visual Studio juga akan mendeteksi konteks dan menghasilkan file ini untuk Anda. Ini punya saya, saya taruh di .vs/launch.json di folder proyek.

VS akan membuat launch.json juga tetapi Anda harus menambahkan dua bagian terpenting, bagian $adapter dan $adapterArgs seperti yang saya lakukan di sini.

{
// 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 }
}
]
}

File launch.json ini digunakan oleh VS dan VS Code dan hal-hal lain dan memberi sistem dan debugger cukup untuk melanjutkan. Tidak mungkin saya tahu untuk mengotomatiskan langkah selanjutnya ini dan melampirkannya ke tombol seperti "Mulai Debugging" - itu akan menjadi pekerjaan baru di VS - tetapi Anda dapat memulainya seperti ini dengan memanggil perintah otomatisasi VS2019 dari "Jendela Perintah" Anda dapat mengakses dengan Lihat | Jendela Lainnya | Jendela Perintah, atau Ctrl-Alt-A.

Setelah saya mengetik ini sekali di Jendela Perintah, saya dapat memulai sesi Debug berikutnya hanya dengan menekan Panah Atas untuk mendapatkan perintah dari riwayat dan menekan enter. Sekali lagi, tidak sempurna, tapi awal.

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

Berikut adalah tangkapan layar saya men-debug aplikasi .NET Core yang berjalan di Linux di bawah WSL dari Windows Visual Studio 2019.

Terima kasih kepada Andy Sterland karena telah membantu saya menyelesaikan ini.

Jadi, itu mungkin, tetapi itu tidak otomatis. Haruskah pengaturan dan persiapan ini otomatis? Apakah pengembangan di WSL dari Visual Studio (bukan Kode) adalah sesuatu yang Anda inginkan? Ada dukungan hebat untuk pengembangan Docker di dalam wadah termasuk debugging interaktif, jadi di mana Anda melihat ini cocok ... jika ada? Apakah ini menambah sesuatu atau lebih nyaman? Apakah Anda ingin debugging "F5" untuk aplikasi WSL dalam VS seperti yang Anda bisa di VS Code?

Sponsor: Seperti C#? Kami juga melakukannya! Itulah mengapa kami mengembangkan .NET IDE lintas platform yang cepat, cerdas, yang memberi Anda lebih banyak kekuatan pengkodean. Analisis kode yang cerdas, penyelesaian kode yang kaya, pencarian dan navigasi instan, debugger tingkat lanjut... Dengan JetBrains Rider, semua yang Anda butuhkan ada di ujung jari Anda. Kode C# dengan kecepatan berpikir di Linux, Mac, atau Windows. Coba JetBrains Rider hari ini!


Linux
  1. Visual Basic .Net di Linux

  2. Apakah Visual Basic didukung oleh .NET Core di Linux?

  3. Cara mengkompilasi kode Visual C++ Windows di Linux

  1. Cara Remote Desktop Dari Windows Ke Desktop Linux Menggunakan XRDP

  2. Mengakses Sistem Osx Jarak Jauh Dari Osx, Linux, Windows?

  3. Salin file dari linux ke windows share dengan C# (.NET core)

  1. Memulai Visual Studio Code (VSC) di Linux

  2. Instal Kode Microsoft Visual Studio Di Linux

  3. Bagaimana cara menggunakan rsync dari PC Windows ke server Linux jarak jauh?