Penyebaran dan debugging aplikasi inti dotnet secara remote di * nix

Pendahuluan


Menyelesaikan tugas yang agak mendasar dan tidak menguasai kondisi pengembangan Spartan untuk ESP8266, saya memutuskan untuk kembali ke dunia .Net yang nyaman di mana terdapat pelengkapan otomatis dan debugging.


Jadi, kita ada di tangan:


  • Komputer dengan Windows 10 Pro Build 1803 (namun, hampir semua yang ditulis di bawah ini dapat dilakukan pada * nix dengan perubahan minimal)
  • Oranye Pi Nol dengan Raspbian Server diinstal
  • Keinginan untuk menulis kode dalam C # dan debug pada perangkat hanya dengan menekan F5

Persiapan lingkungan


Komputer Pengembang


Pengembangan akan dilakukan dalam Visual Studio Code dengan ekstensi C# diinstal.


Diperlukan .NET Core SDK yang diperlukan.


Juga disarankan untuk memiliki versi Windows 10 1803 , karena OpenSSH diinstal secara default di dalamnya. Pada versi Windows 10 sebelumnya, OpenSSH dapat diinstal melalui Kelola Add-on. Namun, pada saat yang sama, tidak ada yang melarang penggunaan klien SSH pihak ketiga.


Perangkat target


Persiapan


Pertama-tama, Anda perlu mengkonfigurasi akses kunci SSH. Instruksi luar biasa dari Digital Ocean sangat membantu dalam hal ini.


* Catatan:


Kunci pribadi dapat disimpan sebagai file terpisah di folder .ssh, tapi saya sarankan menggunakan banyak KeePass + KeeAgent . KeePass menyediakan penyimpanan kunci yang aman, dan KeeAgent menyediakan kunci. Agar dapat bekerja dengan klien SSH Windows bawaan, Anda harus mengaktifkan pengaturan eksperimental yang sesuai. *


Instal .NET Core SDK


Karena repositori Microsoft resmi tidak berisi paket yang dikompilasi untuk ARM32, Anda harus menginstal .NET Core SDK secara manual.


Pertama-tama, kita perlu menginstal dependensi yang tercantum dalam dokumentasi .


 apt-get install liblttng-ust0 libcurl3 libssl1.0.0 libkrb5-3 zlib1g libicu52 gettext 

Sekarang Anda dapat menginstal SDK.


Anda dapat mengambil tautan langsung ke arsip dari SDK dari halaman SDK di GitHub .


 curl -sSL -o dotnet.tar.gz https://dotnetcli.blob.core.windows.net/dotnet/Sdk/release/2.1.401/dotnet-sdk-latest-linux-arm.tar.gz sudo mkdir -p /opt/dotnet && sudo tar zxf dotnet.tar.gz -C /opt/dotnet sudo ln -s /opt/dotnet/dotnet /usr/local/bin 

Instal Remote Debugger


Skrip instalasi debugger jarak jauh menggunakan unzip :


 sudo apt-get install unzip 

Untuk menginstal debugger jarak jauh, jalankan perintah berikut:


 curl -sSL https://aka.ms/getvsdbgsh | bash /dev/stdin -r linux-arm -v latest -l ~/vsdbg 

Mengkonfigurasi VS Core untuk penyebaran jarak jauh dan debugging di linux


1. Buat proyek


Semuanya sangat sederhana di sini:


 mkdir DemoProject cd DemoProject dotnet new console 

2. Buat file konfigurasi


Buka folder dengan proyek. Ekstensi C # akan secara otomatis mengunduh paket OmniSharp dan .NET Core Debuger jika belum pernah dilakukan sebelumnya. Setelah itu, kita akan diminta untuk membuat aset untuk membangun dan men-debug proyek. Kami sepakat ini. Akibatnya, folder .vscode dengan file tasks.json dan launch.json . File-file ini menjelaskan tugas-tugas yang dapat Anda lakukan dan memulai konfigurasi. Secara default, konfigurasi peluncuran debug dibuat, tergantung pada tugas build.


3. Edit file konfigurasi


Ide dasar memulai dan men-debug pada perangkat jarak jauh adalah membuat tugas yang mengumpulkan proyek dan menyalinnya ke perangkat dan konfigurasi peluncuran menggunakan debugger jarak jauh.
Saya akan memberikan deskripsi tugas yang sudah selesai:


 { "version": "2.0.0", "tasks": [ { "label": "publish", "command": "dotnet", "type": "process", "args": [ "publish", "${workspaceFolder}/DemoProject.csproj" ] }, { "label": "copy-to-device", "dependsOn": "publish", "command": "scp", "type": "process", "args": [ "-r", "-v", "${workspaceFolder}/bin/Debug/netcoreapp2.1/publish/.", "<target_user>@<target_ip>:~/DemoProject/" ] }, ] } 

Tugas publish memanggil perintah dotnet publish , yang mengemas aplikasi dan dependensinya ke dalam folder untuk ditempatkan.


Perintah copy-to-device menggunakan scp untuk menyalin aplikasi yang diterbitkan ke perangkat jarak jauh. Perhatikan titik di ujung jalan tempat penyalinan terjadi. Jika Anda tidak menentukannya, maka pada salinan berikutnya, folder publish akan ditempatkan di DemoProject , dan tidak akan menimpanya. Parameter dependsOn menunjukkan bahwa copy-to-device tergantung pada publish . Dengan demikian, sebelum menjalankan copy-to-device publish akan dieksekusi.


Selanjutnya, Anda perlu mengonfigurasi konfigurasi mulai jarak jauh dan debugging:


 { "version": "0.2.0", "configurations": [ { "name": ".NET Core Launch (console)", "type": "coreclr", "request": "launch", "preLaunchTask": "copy-to-device", "program": "~/DemoProject/DemoProject.dll", "args": [], "cwd": "~/DemoProject", "console": "internalConsole", "stopAtEntry": false, "internalConsoleOptions": "openOnSessionStart", "pipeTransport": { "pipeCwd": "${workspaceRoot}", "pipeProgram": "ssh", "pipeArgs": [ "-T", "<target_user>@<target_ip>" ], "debuggerPath": "~/vsdbg/vsdbg", "quoteArgs": true } } ,] } 

"preLaunchTask": "copy-to-device" menunjukkan bahwa Anda harus menyelesaikan tugas copy-to-device sebelum memulai sesi debugging. Dengan demikian, setiap kali sebelum debugging, proyek akan dipublikasikan dan disalin ke perangkat target.


Parameter pipeTransport memungkinkan Anda mengonfigurasi penggunaan debugger jarak jauh. Dalam hal ini, ssh digunakan sebagai program yang menyediakan transportasi, tetapi tidak ada yang mencegah plink.exe dari putty program putty .


4. Debugging


Setelah menekan F5, proyek dibangun, proyek disalin, dan aplikasi diluncurkan pada perangkat jarak jauh. Debugging sepenuhnya identik dengan lokal.


Catatan:
Setelah aplikasi dihentikan, setiap kali saya menerima pesan Error from pipe program 'ssh': Process is terminating due to StackOverflowException . Dilihat oleh masalah terbuka pada GitHub, ini adalah masalah debugger yang diketahui. Tetapi karena kesalahan terjadi setelah debugging selesai, Anda dapat mengabaikan ini


Sumber daya yang digunakan


β†’ Mengatur Raspian dan .NET Core 2.0 pada Raspberry Pi
β†’ Omnisharp-vscode Remote Debugging Di Lengan Linux
β†’ dotnet mempublikasikan bantuan perintah
β†’ Mengkonfigurasi launch.json untuk debugging C #
β†’ Visual Studio Code Integrasikan dengan Alat Eksternal via Tugas

Source: https://habr.com/ru/post/id422141/


All Articles