引言
解决了一个相当基本的任务,并且没有掌握ESP8266的Spartan开发条件,我决定回到舒适的.Net世界,那里有自动完成和调试功能。
因此,我们手边有:
- 装有Windows 10 Pro Build 1803的计算机(但是,几乎所有下面编写的内容都可以在* nix上完成,而无需进行太多更改)
- 安装了Raspbian Server的Orange Pi Zero
- 只需按F5键,就可以用C#编写代码并在设备上进行调试的愿望
环境准备
开发者计算机
将使用安装了C#
扩展名的Visual Studio Code进行开发。
需要安装的.NET Core SDK 。
还建议使用Windows 10 1803版本,因为默认情况下已安装OpenSSH。 在Windows 10的早期版本中,可以通过管理加载项安装OpenSSH。 但是,与此同时,也没有任何东西禁止使用第三方SSH客户端。
目标设备
准备工作
首先,您需要配置SSH密钥访问。 Digital Ocean的出色指导对此提供了完美的帮助。
*注意:
私钥可以作为单独的文件存储在.ssh文件夹中,但我建议使用一堆非常方便的KeePass + KeeAgent 。 KeePass提供安全的密钥存储,而KeeAgent提供密钥。 为了使其与内置的Windows SSH客户端一起使用,必须激活相应的实验设置。
安装.NET Core SDK
由于正式的Microsoft存储库不包含针对ARM32编译的软件包,因此必须手动安装.NET Core SDK。
首先,我们需要安装文档中列出的依赖项。
apt-get install liblttng-ust0 libcurl3 libssl1.0.0 libkrb5-3 zlib1g libicu52 gettext
现在,您可以安装SDK。
您可以从GitHub上 SDK 页面的SDK中直接链接到存档。
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
安装远程调试器
远程调试器安装脚本使用unzip
:
sudo apt-get install unzip
要安装远程调试器,请运行以下命令:
curl -sSL https://aka.ms/getvsdbgsh | bash /dev/stdin -r linux-arm -v latest -l ~/vsdbg
配置VS Core以在Linux上进行远程部署和调试
1.创建一个项目
这里的一切都很简单:
mkdir DemoProject cd DemoProject dotnet new console
2.创建配置文件
打开包含项目的文件夹。 如果以前没有做过,C#扩展名将自动下载OmniSharp和.NET Core Debuger软件包。 之后,将要求我们创建资产以构建和调试项目。 我们对此表示同意。 结果, .vscode
文件夹将.vscode
tasks.json
和launch.json
。 这些文件描述了您可以执行的任务以及启动配置。 默认情况下,将根据构建任务创建调试启动配置。
3.编辑配置文件
在远程设备上启动和调试的基本思想是创建任务,以收集项目并将其复制到设备,并使用远程调试器将其启动配置。
我将对完成的任务进行描述:
{ "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/" ] }, ] }
publish
任务调用dotnet publish
命令,该命令将应用程序及其依赖项打包到用于部署的文件夹中。
copy-to-device
命令使用scp
将已发布的应用程序复制到远程设备。 注意复制发生路径的末端。 如果未指定,则在后续副本上, publish
文件夹将放置在DemoProject
,并且不会覆盖它。 dependsOn
参数指示copy-to-device
取决于publish
。 因此,在运行copy-to-device
将执行publish
。
接下来,您需要配置远程启动和调试配置:
{ "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 } } ,] }
"preLaunchTask": "copy-to-device"
参数指示您必须在开始调试会话之前完成copy-to-device
任务。 因此,每次调试之前,项目都会被发布并复制到目标设备。
pipeTransport
参数允许您配置远程调试器的使用。 在这种情况下, ssh
用作提供传输的程序,但是没有什么可以阻止putty
程序putty
plink.exe
。
4.调试
按F5后,将构建项目,将项目复制,然后在远程设备上启动应用程序。 调试与本地完全相同。
注意事项:
应用程序终止后,每次我Error from pipe program 'ssh': Process is terminating due to StackOverflowException
消息中收到Error from pipe program 'ssh': Process is terminating due to StackOverflowException
消息Error from pipe program 'ssh': Process is terminating due to StackOverflowException
。 从GitHub上的公开问题来看,这是一个已知的调试器问题。 但是由于错误是在调试完成后发生的,因此您可以忽略此错误
使用资源
→ 在Raspberry Pi上设置Raspian和.NET Core 2.0
→ Linux Arm上的Omnisharp-vscode远程调试
→ dotnet发布命令帮助
→ 为C#调试配置launch.json
→ Visual Studio代码通过任务与外部工具集成