Einführung
Nachdem ich eine eher elementare Aufgabe gelöst hatte und die spartanischen Entwicklungsbedingungen für ESP8266 nicht beherrschte, beschloss ich, in die gemütliche .Net-Welt zurückzukehren, in der es automatische Vervollständigung und Debugging gibt.
Wir haben also zur Hand:
- Ein Computer mit Windows 10 Pro Build 1803 (jedoch kann fast alles, was unten beschrieben ist, mit minimalen Änderungen auf * nix ausgeführt werden)
- Orange Pi Zero mit installiertem Raspbian Server
- Der Wunsch, Code in C # zu schreiben und auf dem Gerät zu debuggen, indem Sie einfach F5 drücken
Umweltvorbereitung
Entwicklercomputer
Die Entwicklung wird in Visual Studio Code mit der installierten C#
-Erweiterung durchgeführt.
Ein installiertes .NET Core SDK ist erforderlich.
Es ist auch ratsam, eine Version von Windows 10 1803 zu haben , da OpenSSH standardmäßig darin installiert ist. In früheren Versionen von Windows 10 kann OpenSSH über Add-Ons verwalten installiert werden. Gleichzeitig verbietet jedoch nichts die Verwendung von SSH-Clients von Drittanbietern.
Zielgerät
Vorbereitung
Zunächst müssen Sie den SSH-Schlüsselzugriff konfigurieren. Die exzellente Anleitung von Digital Ocean hilft dabei perfekt.
* Hinweis:
Private Schlüssel können als separate Dateien im .ssh-Ordner gespeichert werden. Ich empfehle jedoch, die recht praktische Sammlung von KeePass + KeeAgent zu verwenden . KeePass bietet sicheren Schlüsselspeicher und KeeAgent bietet Schlüssel. Damit es mit dem integrierten Windows SSH-Client funktioniert, müssen Sie den entsprechenden Versuchsaufbau aktivieren. *
Installieren Sie das .NET Core SDK
Da das offizielle Microsoft-Repository keine für ARM32 kompilierten Pakete enthält, müssen Sie das .NET Core SDK manuell installieren.
Zunächst müssen wir die in der Dokumentation aufgeführten Abhängigkeiten installieren.
apt-get install liblttng-ust0 libcurl3 libssl1.0.0 libkrb5-3 zlib1g libicu52 gettext
Jetzt können Sie das SDK installieren.
Sie können vom SDK aus einen direkten Link zum Archiv von der SDK- Seite auf GitHub nehmen .
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
Installieren Sie den Remote-Debugger
Das Remote-Debugger-Installationsskript verwendet unzip
:
sudo apt-get install unzip
Führen Sie den folgenden Befehl aus, um den Remote-Debugger zu installieren:
curl -sSL https://aka.ms/getvsdbgsh | bash /dev/stdin -r linux-arm -v latest -l ~/vsdbg
Konfigurieren von VS Core für die Remotebereitstellung und das Debuggen unter Linux
1. Erstellen Sie ein Projekt
Hier ist alles sehr einfach:
mkdir DemoProject cd DemoProject dotnet new console
2. Konfigurationsdateien erstellen
Öffnen Sie den Ordner mit dem Projekt. Die C # -Erweiterung lädt automatisch die OmniSharp- und .NET Core Debuger-Pakete herunter, sofern dies noch nicht geschehen ist. Danach werden wir aufgefordert, Assets zum Erstellen und Debuggen des Projekts zu erstellen. Da sind wir uns einig. Infolgedessen wird der Ordner .vscode
mit den launch.json
tasks.json
und launch.json
. Diese Dateien beschreiben Aufgaben, die Sie ausführen und Konfigurationen starten können. Standardmäßig wird abhängig von der Build-Aufgabe eine Debug-Startkonfiguration erstellt.
3. Bearbeiten Sie die Konfigurationsdateien
Die Hauptidee beim Starten und Debuggen auf einem Remote-Gerät besteht darin, Aufgaben zu erstellen, die das Projekt erfassen und mit dem Remote-Debugger auf das Gerät und die Startkonfiguration kopieren.
Ich werde eine Beschreibung der erledigten Aufgaben geben:
{ "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/" ] }, ] }
Die publish
ruft den Befehl dotnet publish
, mit dem die Anwendung und ihre Abhängigkeiten zur Bereitstellung in einen Ordner dotnet publish
.
Der Befehl "Auf copy-to-device
kopieren" verwendet scp
um die veröffentlichte Anwendung auf das Remote-Gerät zu kopieren. Achten Sie auf den Punkt am Ende des Pfads, von dem aus kopiert wird. Wenn Sie es nicht angeben, wird der publish
bei nachfolgenden Kopien in DemoProject
und nicht überschrieben. Der Parameter abhängigeOn gibt an publish
dass das copy-to-device
von der publish
abhängig ist. Daher wird vor dem Ausführen von copy-to-device
publish
ausgeführt.
Als Nächstes müssen Sie die Remote-Start- und Debugging-Konfiguration konfigurieren:
{ "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 } } ,] }
Der "preLaunchTask": "copy-to-device"
gibt an, dass Sie die Aufgabe "preLaunchTask": "copy-to-device"
müssen, bevor Sie eine Debugging-Sitzung starten. Daher wird das Projekt jedes Mal vor dem Debuggen veröffentlicht und auf das Zielgerät kopiert.
Mit pipeTransport
Parameter pipeTransport
können Sie die Verwendung eines Remote-Debuggers konfigurieren. In diesem Fall wird ssh
als das Programm verwendet, das den Transport bereitstellt, aber nichts hindert plink.exe
am putty
Programmsatz.
4. Debuggen
Nach dem Drücken von F5 wird das Projekt erstellt, das Projekt kopiert und die Anwendung auf dem Remote-Gerät gestartet. Das Debuggen ist völlig identisch mit lokal.
Hinweis:
Nach Beendigung der Anwendung wurde jedes Mal, wenn ich eine Error from pipe program 'ssh': Process is terminating due to StackOverflowException
erhielt Error from pipe program 'ssh': Process is terminating due to StackOverflowException
angezeigt Error from pipe program 'ssh': Process is terminating due to StackOverflowException
. Dem offenen Problem auf GitHub nach zu urteilen, ist dies ein bekanntes Debugger-Problem. Da der Fehler jedoch nach Abschluss des Debuggens auftritt, können Sie dies ignorieren
Verwendete Ressourcen
→ Einrichten von Raspian und .NET Core 2.0 auf einem Raspberry Pi
→ Omnisharp-vscode Remote-Debugging unter Linux Arm
→ Hilfe zum Dotnet-Veröffentlichungsbefehl
→ Konfigurieren von launch.json für das C # -Debugging
→ Visual Studio-Code über Aufgaben in externe Tools integrieren