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