Présentation
Résolvant une tùche plutÎt élémentaire et n'ayant pas maßtrisé les conditions de développement spartiate pour ESP8266, j'ai décidé de retourner dans le monde confortable de .Net dans lequel il y a auto-complétion et débogage.
Donc, nous avons sous la main:
- Un ordinateur avec Windows 10 Pro Build 1803 (cependant, presque tout ce qui est Ă©crit ci-dessous peut ĂȘtre fait sur * nix avec des changements minimes)
- Orange Pi Zero avec Raspbian Server installé
- Le désir d'écrire du code en C # et de déboguer sur l'appareil simplement en appuyant sur F5
Préparation de l'environnement
Développeur Computer
Le développement sera effectué dans Visual Studio Code avec l'extension C#
installée.
Un SDK .NET Core installé est requis.
Il est Ă©galement conseillĂ© d'avoir une version de Windows 10 1803 , car OpenSSH y est installĂ© par dĂ©faut. Dans les versions antĂ©rieures de Windows 10, OpenSSH peut ĂȘtre installĂ© via GĂ©rer les modules complĂ©mentaires. Cependant, en mĂȘme temps, rien n'interdit l'utilisation de clients SSH tiers.
Appareil cible
La préparation
Tout d'abord, vous devez configurer l'accÚs aux clés SSH. L' excellente instruction de Digital Ocean y contribue parfaitement.
* Remarque:
Les clĂ©s privĂ©es peuvent ĂȘtre stockĂ©es sous forme de fichiers sĂ©parĂ©s dans le dossier .ssh, mais je recommande d'utiliser le groupe assez pratique de KeePass + KeeAgent . KeePass fournit un stockage sĂ©curisĂ© des clĂ©s et KeeAgent fournit des clĂ©s. Pour qu'il fonctionne avec le client Windows SSH intĂ©grĂ©, vous devez activer la configuration expĂ©rimentale correspondante. *
Installer le SDK .NET Core
Ătant donnĂ© que le rĂ©fĂ©rentiel Microsoft officiel ne contient pas de packages compilĂ©s pour ARM32, vous devez installer le SDK .NET Core manuellement.
Tout d'abord, nous devons installer les dépendances répertoriées dans la documentation .
apt-get install liblttng-ust0 libcurl3 libssl1.0.0 libkrb5-3 zlib1g libicu52 gettext
Vous pouvez maintenant installer le SDK.
Vous pouvez prendre un lien direct vers l'archive Ă partir du SDK depuis la page SDK sur 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
Installer le débogueur distant
Le script d'installation du débogueur distant utilise unzip
:
sudo apt-get install unzip
Pour installer le débogueur distant, exécutez la commande suivante:
curl -sSL https://aka.ms/getvsdbgsh | bash /dev/stdin -r linux-arm -v latest -l ~/vsdbg
Configuration de VS Core pour le déploiement et le débogage à distance sur Linux
1. Créez un projet
Tout est trĂšs simple ici:
mkdir DemoProject cd DemoProject dotnet new console
2. Créez des fichiers de configuration
Ouvrez le dossier avec le projet. L'extension C # téléchargera automatiquement les packages OmniSharp et .NET Core Debuger si cela n'a pas été fait auparavant. AprÚs cela, il nous sera demandé de créer des ressources pour générer et déboguer le projet. Nous sommes d'accord là -dessus. Par conséquent, le dossier .vscode
avec les launch.json
tasks.json
et launch.json
. Ces fichiers décrivent les tùches que vous pouvez effectuer et les configurations de démarrage. Par défaut, une configuration de lancement de débogage est créée, en fonction de la tùche de génération.
3. Modifiez les fichiers de configuration
L'idée de base du démarrage et du débogage sur un périphérique distant est de créer des tùches qui collectent le projet et le copient sur le périphérique et la configuration de lancement à l'aide du débogueur distant.
Je vais donner une description des tùches terminées:
{ "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/" ] }, ] }
La tĂąche de publish
appelle la commande dotnet publish
, qui regroupe l'application et ses dépendances dans un dossier pour le déploiement.
La commande copy-to-device
utilise scp
pour copier l'application publiée sur le périphérique distant. Faites attention au point situé à la fin du chemin à partir duquel la copie a lieu. Si vous ne le spécifiez pas, sur les copies suivantes, le dossier de publish
sera placé dans DemoProject
et ne le remplacera pas. Le paramĂštre dependsOn
indique que la copy-to-device
dépend de la publish
. Ainsi, avant d'exécuter la copy-to-device
publish
sera exécutée.
Ensuite, vous devez configurer la configuration de démarrage et de débogage à distance:
{ "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 } } ,] }
Le "preLaunchTask": "copy-to-device"
indique que vous devez terminer la tĂąche de copy-to-device
avant de démarrer une session de débogage. Ainsi, à chaque fois avant le débogage, le projet sera publié et copié sur le périphérique cible.
Le paramĂštre pipeTransport
vous permet de configurer l'utilisation d'un débogueur distant. Dans ce cas, ssh
utilisĂ© comme programme assurant le transport, mais rien n'empĂȘche plink.exe
de l' putty
programmes putty
.
4. Débogage
AprÚs avoir appuyé sur F5, le projet est généré, le projet est copié et l'application est lancée sur le périphérique distant. Le débogage est complÚtement identique au local.
Remarque:
Une fois l'application terminée, chaque fois que je Error from pipe program 'ssh': Process is terminating due to StackOverflowException
message d' Error from pipe program 'ssh': Process is terminating due to StackOverflowException
. A en juger par le problÚme ouvert sur GitHub, il s'agit d'un problÚme de débogueur connu. Mais puisque l'erreur se produit une fois le débogage terminé, vous pouvez ignorer cela
Ressources utilisées
â Configuration de Raspian et .NET Core 2.0 sur un Raspberry Pi
â DĂ©bogage Ă distance Omnisharp-vscode sur Linux Arm
â aide de la commande dotnet publish
â Configuration de launch.json pour le dĂ©bogage C #
â Visual Studio Code intĂ©grer avec des outils externes via des tĂąches