在Raspberry Pi上轻松设置.NET Core并使用VS Code进行远程调试

目录

介绍

背景

工具选择

先决条件

准备SD卡

SSH配置和.NET安装

示例程序

兴趣点


介绍

手动设置了用于.NET Core和远程调试的Raspberry Pis之后,我想要一个更简单,更自动化的解决方案。这样做的好处是:

  • 更轻松、更省时
  • 更少的错误倾向
  • 更容易跟上Raspbian的新版本
  • Headless ——即无需显示器、键盘或鼠标。

背景

关于该主题还有很多其他文章,对我来说可能最有用的是Scott Hanselman的这篇文章。但是,它们都需要大量的手动设置。我想要一个尽可能自动化的解决方案。显然,需要进行一些手动干预,因为您必须物理地移动SD卡,给设备加电等,但是除此之外,我的目的是运行脚本,然后设置就会发生。正如Scott Hanselman所说:

引用:

好的(有点开玩笑,但不是真的)是程序员的经验法则——如果您执行两次操作,请使其自动化

我希望安装程序能够实现以下目标:

  • 从开发机上新格式化的SD卡开始
  • 将卡配置为在传输到Raspberry Pi时允许远程ssh
  • 配置Raspberry Pi以实现安全的无密码ssh连接
  • 安装.NET CoreVS远程调试器

最后,我将添加几个C#项目来演示所有工作。

工具选择

我已经使用VS Code几年了,并且真的很喜欢它——这就是我决定使用的方式(几十年来我也使用过各种版本的Visual Studio——但是我不会在这里详细介绍它们的优点和缺点。:)

我也非常喜欢Powershell,但决定将Bash用于脚本。希望这将使其尽可能成为跨平台的。您将需要配置VS Code以将bash作为默认外壳程序——最简单的方法是按Ctrl + Shift + P并键入default shell。这将提供命令提示符,Powershell或各种Linux版本的选项。最适合我的人是Git Bash但其他的也应该工作。

先决条件

VS Code解决方案可以复制到开发计算机上的任何位置。在Visual Studio Code中打开它时,请使用文件菜单中的打开文件夹

您将需要一种将Raspbian镜像放入SD卡的方法。我会推荐Raspberry Pi Imager。您不必先下载镜像,但我认为这是值得做的,因为否则,您可能会发现自己使用了大量的Internet带宽(即使压缩后,镜像的大小也往往为GB)。可通过镜像列表上的使用自定义来访问下载的镜像。

您将需要一个Wifi路由器,并且需要知道SSIDPSK。我认为你有那些:)。而且显然是Raspberry Pi和电源。我在Raspberry Pi 3上进行了测试,但是从V2起的任何版本都可以。请注意,这不会Raspberry Pi Zero工作,因为它使用是.NET Core不支持的ARMv6。如果您的Raspberry Pi没有内置Wifi,则还需要USB Wifi加密狗。

最后,您将需要下载.NET core SDK的最新版本。在撰写本文时,版本为3.1。这应该复制到PiFiles文件夹。您将需要ARM32版本,并且应该期望它的大小超过100MB

准备SD

一旦有了新刷新的SD卡,在将其插入Raspberry Pi之前,需要一些额外的配置。这是任务12。要运行任务,请按Ctrl + Shift + P并选择任务:运行任务。您应该看到如下任务列表:

选择任务1.设置Wifi设置...这将要求您输入Wifi SSIDPSK。输入它们时,它们将存储在settings.json中,因此您无需再次输入它们。

然后选择任务2.修改SD卡以进行SSH访问...这将要求您提供带有SD卡的驱动器。因为这将在bash脚本中访问,所以它可能类似于/d/mnt/d。如果您刚刚对卡进行了镜像,则可能需要重新插入它,因为镜像程序会在完成后将其弹出。运行任务2后,应弹出卡并将其插入Raspberry Pi。打开Raspberry Pi的电源,等待其启动,然后再进行下一步。

SSH配置和.NET安装

下一步是运行任务3.设置Raspberry Pi Name。这会将主机名从默认的raspberrypi更改为您选择名称。还会询问您是否要设置静态IP地址。如果您不希望使用静态IP,请将其留空。我在Windows 10和本地主机名查找(mDNS)方面的经验是非常少的——我不确定它是否是可用的。但是,即使您根本无法使用本地名称解析,也应该可以使用IP地址。和以前一样,这些设置会记住在settings.json中,因此您不必重新输入它们。

设置好新名称后,任务4. 将公共SSH密钥添加到Raspberry Pi将重新配置Raspberry Pi并将公共SSH密钥复制到它,这样当您(VS工具)通过SSH连接时就不必输入密码了。系统将询问您是否要连接(键入yes),然后输入raspberry pi密码(键入raspberry)。此时,Raspberry Pi将重新启动,因此您需要等待,然后再运行下一步。如果尚未设置ssh密钥,则类似这样的文章将向您展示如何创建一个。现在,您将能够登录,而不需要输入密码,但只有从您的机器。

任务5. Raspberry Pi Dotnet安装将在Raspberry Pi上安装 .NET核心SDKVS调试器。这将需要一段时间,但是一旦完成,我们现在就可以在Raspberry Pi本身上或在我们的主要开发机器上远程编写.NET程序——显然,远程编写会变得更加有趣!

示例程序

我创建了两个示例程序。第一个是Hello World项目。这将在本地(即在开发计算机上)和远程运行。运行它的最简单方法是选择左侧的运行图标,然后从下拉列表中选择配置:

现在,您应该能够像在本地一样设置断点并进行调试:

为了运行Blink程序,您需要将LED连接到GPIO引脚之一。Blink程序使用出色的System.Device.Gpio库,应使用NuGet自动安装该库。

兴趣点

这就是本文的内容。使用Python编写blink程序可能会容易得多,但是对我来说,使用c#的全部意义在于,您可以使用.NET创建更大、更可维护的解决方案(尽管我敢肯定有些人会不同意这一点)。话虽如此,本文中的演示程序并非旨在用作更大程序的模板。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章