Despliegue remoto y depuración de aplicaciones centrales de dotnet en * nix

Introduccion


Resolviendo una tarea bastante elemental y sin haber dominado las condiciones de desarrollo espartanas para ESP8266, decidí regresar al acogedor mundo .Net en el que hay autocompletado y depuración.


Entonces, tenemos a mano:


  • Una computadora con Windows 10 Pro Build 1803 (sin embargo, casi todo lo escrito a continuación se puede hacer en * nix con cambios mínimos)
  • Orange Pi Zero con el servidor Raspbian instalado
  • El deseo de escribir código en C # y depurar en el dispositivo simplemente presionando F5

Preparación del medio ambiente


Computadora del desarrollador


El desarrollo se llevará a cabo en Visual Studio Code con la extensión C# instalada.


Se requiere un .NET Core SDK instalado.


También es recomendable tener una versión de Windows 10 1803 , ya que OpenSSH está instalado de manera predeterminada. En versiones anteriores de Windows 10, OpenSSH se puede instalar a través de Administrar complementos. Sin embargo, al mismo tiempo, nada prohíbe el uso de clientes SSH de terceros.


Dispositivo de destino


Preparación


En primer lugar, debe configurar el acceso de clave SSH. La excelente instrucción de Digital Ocean ayuda perfectamente con esto.


* Nota:


Las claves privadas se pueden almacenar como archivos separados en la carpeta .ssh, pero recomiendo usar el grupo bastante conveniente de KeePass + KeeAgent . KeePass proporciona almacenamiento seguro de claves y KeeAgent proporciona claves. Para que funcione con el cliente Windows SSH incorporado, debe activar la configuración experimental correspondiente. *


Instale el SDK de .NET Core


Dado que el repositorio oficial de Microsoft no contiene paquetes compilados para ARM32, debe instalar el SDK de .NET Core manualmente.


En primer lugar, necesitamos instalar las dependencias enumeradas en la documentación .


 apt-get install liblttng-ust0 libcurl3 libssl1.0.0 libkrb5-3 zlib1g libicu52 gettext 

Ahora puedes instalar el SDK.


Puede tomar un enlace directo al archivo desde el SDK desde la página del SDK en 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 

Instalar depurador remoto


El script de instalación del depurador remoto usa unzip :


 sudo apt-get install unzip 

Para instalar el depurador remoto, ejecute el siguiente comando:


 curl -sSL https://aka.ms/getvsdbgsh | bash /dev/stdin -r linux-arm -v latest -l ~/vsdbg 

Configuración de VS Core para la implementación remota y la depuración en Linux


1. Crear un proyecto


Aquí todo es muy simple:


 mkdir DemoProject cd DemoProject dotnet new console 

2. Crear archivos de configuración


Abra la carpeta con el proyecto. La extensión C # descargará automáticamente los paquetes OmniSharp y .NET Core Debuger si esto no se ha hecho antes. Después de eso, se nos pedirá que creemos activos para construir y depurar el proyecto. Estamos de acuerdo en esto. Como resultado, la carpeta .vscode con los launch.json tasks.json y launch.json . Estos archivos describen tareas que puede realizar y configuraciones de inicio. De forma predeterminada, se crea una configuración de inicio de depuración, dependiendo de la tarea de compilación.


3. Edite los archivos de configuración


La idea básica de iniciar y depurar en un dispositivo remoto es crear tareas que recopilen el proyecto y lo copien en el dispositivo y la configuración de inicio utilizando el depurador remoto.
Daré una descripción de las tareas terminadas:


 { "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 tarea de publish llama al comando de dotnet publish , que empaqueta la aplicación y sus dependencias en una carpeta para su implementación.


El comando copy-to-device usa scp para copiar la aplicación publicada en el dispositivo remoto. Preste atención al punto al final de la ruta desde la que se realiza la copia. Si no lo especifica, en las copias posteriores, la carpeta de publish se colocará en DemoProject y no se sobrescribirá. El parámetro dependsOn indica que la copy-to-device depende de la publish . Por lo tanto, antes de ejecutar la copy-to-device se ejecutará la publish .


A continuación, debe configurar el inicio remoto y la configuración de depuración:


 { "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 } } ,] } 

El "preLaunchTask": "copy-to-device" indica que debe completar la tarea copy-to-device antes de comenzar una sesión de depuración. Por lo tanto, cada vez antes de la depuración, el proyecto se publicará y copiará en el dispositivo de destino.


El parámetro pipeTransport permite configurar el uso de un depurador remoto. En este caso, ssh usa como el programa que proporciona el transporte, pero nada impide plink.exe del putty programas de putty .


4. Depuración


Después de presionar F5, el proyecto se crea, el proyecto se copia y la aplicación se inicia en el dispositivo remoto. La depuración es completamente idéntica a la local.


Nota:
Después de que la aplicación finalizó, cada vez que recibí un mensaje de Error from pipe program 'ssh': Process is terminating due to StackOverflowException . A juzgar por el problema abierto en GitHub, este es un problema conocido de depuración. Pero dado que el error ocurre después de que se completa la depuración, puede ignorar esto


Recursos utilizados


Configuración de Raspian y .NET Core 2.0 en una Raspberry Pi
Depuración remota de Omnisharp-vscode en Linux Arm
ayuda del comando dotnet Publish
Configuración de launch.json para la depuración de C #
Visual Studio Code se integra con herramientas externas a través de tareas

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


All Articles