练习:将应用部署到 Raspberry Pi

已完成

你已构建了原型设备并编写了驱动它的控制台应用。 现在可以将应用部署到设备。

重要

确保已按照“简介”单元中的说明配置 Raspberry Pi。 必须启用 SSH 服务才能从开发计算机进行安全的 shell 访问。 必须启用 I2C 服务才能允许代码访问 I2C 总线。 确保 Raspberry Pi 通过 WiFi 或以太网连接到网络。

有关 Raspberry Pi 配置的详细信息,请参阅Raspberry Pi 文档

部署类型

.NET 提供两种发布模式:依赖于框架和自包含。 在依赖于框架的部署中,应用依赖于目标设备上 .NET 运行时的安装。 在自包含部署中,应用包含所有 .NET 运行时依赖项以及已编译的程序集。 两种方法各有优势。 在本模块中,你将把应用部署为一个自包含应用。

在 Raspberry Pi 上创建目标目录

在新的终端窗口中完成以下步骤:

  1. 打开与 Raspberry Pi 的安全 shell 会话。

    ssh pi@raspberrypi
    

    在上述命令中:

    • ssh 是启动 OpenSSH 的命令。
    • pi 是 Raspberry Pi 上的用户名。
    • raspberrypi 是 Raspberry Pi 的主机名。 如果更改了设备上的主机名,请使用设备的主机名或 IP 地址。

    注意

    大多数新式操作系统都预安装了 OpenSSH。 如果 ssh 命令无法解析,请安装 OpenSSH。

  2. 在 SSH 会话中,在主目录中创建一个名为 cheesecave.net 的目录。 切换到新目录。

    mkdir cheesecave.net
    cd cheesecave.net
    

    你当前的位置是 ~/cheesecave.net。

    A screenshot of an SSH session on a Raspberry Pi with the above steps.

将自包含应用发布到 Raspberry Pi

在开发计算机上的原始终端窗口中完成以下步骤:

  1. 将应用发布为自包含应用。

    dotnet publish --runtime linux-arm64 --self-contained
    

    重要

    这假定你使用的是建议的 64 位 OS。 如果正在使用 32 位版本的 Raspberry Pi OS,则可以使用之前命令中的 --runtime linux-arm 以定位正确的 OS。

    上述命令将创建一个目录,其中包含 linux-arm64 运行时自包含部署所需的文件。 记下 publish 文件夹的位置。

    A screenshot of a terminal session showing the output from dotnet publish.

  2. 将文件从 publish 文件夹复制到 Raspberry Pi 上的部署位置。

    scp ./bin/Debug/net7.0/linux-arm64/publish/* pi@raspberrypi:~/cheesecave.net
    

    在上述命令中:

    • scp 是包含在 OpenSSH 中的安全文件复制命令。
    • ./bin/Debug/net7.0/linux-arm64/publish/* 指定要复制的文件。 在这种情况下,将包含 ./bin/Debug/net7.0/linux-arm64/publish/ 目录中的每个文件。 如果使用不同版本的 .NET SDK 或面向 linux-arm,请输入正确的路径,因为路径会有所不同。
    • pi@raspberrypi:~/cheesecave.net 是目标。
      • pi@raspberrypi 是用户名和主机名,和之前一样。
      • ~/cheesecave.net 是 Raspberry Pi 上将文件复制到的位置。

授予执行权限

在基于 Linux 的操作系统(如 Raspberry Pi OS)中,二进制文件在文件系统中被标记为可执行之前不可执行。

在 Raspberry Pi 上的 SSH 会话中,执行以下命令:

chmod +x ./cheesecave.net

cheesecave.net 可执行文件现在具有执行权限。

在下一单元中,你将在设备上测试代码。