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