Déploiement et débogage à distance des applications de base dotnet sur * nix

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

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


All Articles