Implantação e depuração remotas de aplicativos principais dotnet no * nix

1. Introdução


Resolvendo uma tarefa bastante elementar e não tendo dominado as condições de desenvolvimento espartano para o ESP8266, decidi voltar ao aconchegante mundo .Net no qual há a conclusão automática e a depuração.


Então, temos em mãos:


  • Um computador com Windows 10 Pro Build 1803 (no entanto, quase tudo que é escrito abaixo pode ser feito no * nix com alterações mínimas)
  • Orange Pi Zero com o servidor Raspbian instalado
  • O desejo de escrever código em C # e depurar no dispositivo pressionando F5

Preparação do ambiente


Computador do desenvolvedor


O desenvolvimento será conduzido no Visual Studio Code com a extensão C# instalada.


É necessário um .NET Core SDK instalado.


Também é aconselhável ter uma versão do Windows 10 1803 , pois o OpenSSH é instalado por padrão nele. Nas versões anteriores do Windows 10, o OpenSSH pode ser instalado por meio de Gerenciar Complementos. No entanto, ao mesmo tempo, nada proíbe o uso de clientes SSH de terceiros.


Dispositivo alvo


Preparação


Primeiro de tudo, você precisa configurar o acesso à chave SSH. A excelente instrução da Digital Ocean ajuda perfeitamente com isso.


* Nota:


As chaves privadas podem ser armazenadas como arquivos separados na pasta .ssh, mas eu recomendo usar o grupo bastante conveniente do KeePass + KeeAgent . O KeePass fornece armazenamento seguro de chaves e o KeeAgent fornece chaves. Para que ele funcione com o cliente SSH do Windows interno, você deve ativar a configuração experimental correspondente. *


Instale o .NET Core SDK


Como o repositório oficial da Microsoft não contém pacotes compilados para o ARM32, você deve instalar o .NET Core SDK manualmente.


Primeiro de tudo, precisamos instalar as dependências listadas na documentação .


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

Agora você pode instalar o SDK.


Você pode obter um link direto para o arquivo morto a partir do SDK na página SDK do 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


O script de instalação do depurador remoto usa unzip :


 sudo apt-get install unzip 

Para instalar o depurador remoto, execute o seguinte comando:


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

Configurando o VS Core para implantação remota e depuração no linux


1. Crie um projeto


Tudo é muito simples aqui:


 mkdir DemoProject cd DemoProject dotnet new console 

2. Crie arquivos de configuração


Abra a pasta com o projeto. A extensão C # baixará automaticamente os pacotes OmniSharp e .NET Core Debuger, se isso não tiver sido feito antes. Depois disso, seremos solicitados a criar ativos para criar e depurar o projeto. Nós concordamos com isso. Como resultado, a pasta .vscode com os launch.json e launch.json . Esses arquivos descrevem tarefas que você pode executar e configurações de inicialização. Por padrão, uma configuração de inicialização de depuração é criada, dependendo da tarefa de compilação.


3. Edite os arquivos de configuração


A idéia básica de iniciar e depurar em um dispositivo remoto é criar tarefas que coletam o projeto e copiam para o dispositivo e a configuração de inicialização usando o depurador remoto.
Vou dar uma descrição das tarefas concluídas:


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

A tarefa de publish chama o comando de dotnet publish , que empacota o aplicativo e suas dependências em uma pasta para implantação.


O comando copy-to-device usa scp para copiar o aplicativo publicado para o dispositivo remoto. Preste atenção ao ponto no final do caminho a partir do qual a cópia ocorre. Se você não especificar, nas cópias subseqüentes, a pasta de publish será colocada no DemoProject e não a substituirá. O parâmetro dependsOn indica que a copy-to-device depende da publish . Portanto, antes de executar a copy-to-device publish será executada.


Em seguida, você precisa definir a configuração remota de início e depuração:


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

O "preLaunchTask": "copy-to-device" indica que você deve concluir a tarefa de copy-to-device antes de iniciar uma sessão de depuração. Portanto, sempre que antes da depuração, o projeto será publicado e copiado no dispositivo de destino.


O parâmetro pipeTransport permite configurar o uso de um depurador remoto. Nesse caso, o ssh usado como o programa que fornece o transporte, mas nada impede o plink.exe do putty programas putty .


4. Depuração


Depois de pressionar F5, o projeto é criado, o projeto é copiado e o aplicativo é iniciado no dispositivo remoto. A depuração é completamente idêntica à local.


Nota:
Após o término do aplicativo, sempre que eu recebia uma mensagem de Error from pipe program 'ssh': Process is terminating due to StackOverflowException . A julgar pelo problema aberto no GitHub, esse é um problema conhecido do depurador. Mas como o erro ocorre após a conclusão da depuração, você pode ignorar isso


Recursos utilizados


Configurando o Raspian e o .NET Core 2.0 em um Raspberry Pi
Depuração Remota Omnisharp-vscode no Linux Arm
ajuda do comando dotnet publish
Configurando o launch.json para depuração em C #
Código do Visual Studio Integre-se com Ferramentas Externas através de Tarefas

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


All Articles