Remote-Bereitstellung und Debugging von Dotnet-Kernanwendungen unter * nix

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

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


All Articles