点击上方蓝字关注“汪宇杰博客”
导语
我最近买了个树莓派4,4GB内存高富帅配置,并安装了官方操作系统Raspbian。今天我成功运行了一个 Core 3.0 应用程序。我们来看看怎么弄的吧~
ARM32 还是 ARM64?
需要说明的是,目前无法在树莓派 4 上运行 ARM64 版本的 .NET Core 运行时或 SDK。虽然树莓派4的CPU支持64位,但其官方操作系统Raspbian不是64位的。其他第三方操作系统也尚未更新以支持树莓派4。所以,如果你想在树莓派4上跑 .NET Core 3.0 ,唯一的选择是 ARM32。
准备
必需:互联网连接,用于下载 .NET Core 3.0 运行时及SDK
可选:VS / VSCode 用于开发样例工程
更新 Raspbian 系统
sudo apt-get update
sudo apt-get upgrade
建议为你的树莓派准备个显示器或 VNC 连接,以便可以在最后一步测试你的 Core 网站,而无需纠结端口和网络设置。
下载 .NET Core 3.0 SDK 及运行时
在你的电脑上打开/download/dotnet-core/3.0找到Linux底下的ARM32版本的 SDK 及 Runtime,点开,页面上会显示一个 Direct Link。这两个链接就是我们在 Raspbian 上要用来下载最新版 SDK 及运行时的链接。
目前,这两个链接是:
.NET Core 3.0 SDK (Linux/ARM32)
https://download./download/pr/8ddb8193-f88c-4c4b-82a3-39fcced27e91/b8e0b9bf4cf77dff09ff86cc1a73960b/dotnet-sdk-3.0.100-linux-arm.tar.gz
Core 3.0 Runtime (Linux/ARM32)
https://download./download/pr/e9d4b012-a877-443c-8344-72ef910c86dd/b5e729b532d7b3b5488c97764bd0fb8e/aspnetcore-runtime-3.0.0-linux-arm.tar.gz
到树莓派上使用wget下载这两个文件
wget https://download./download/pr/8ddb8193-f88c-4c4b-82a3-39fcced27e91/b8e0b9bf4cf77dff09ff86cc1a73960b/dotnet-sdk-3.0.100-linux-arm.tar.gz
wget https://download./download/pr/e9d4b012-a877-443c-8344-72ef910c86dd/b5e729b532d7b3b5488c97764bd0fb8e/aspnetcore-runtime-3.0.0-linux-arm.tar.gz
安装 .NET Core 3.0 SDK 及运行时
创建一个新目录,如dotnet-arm32,将刚才下载好的文件解压进去。
mkdir dotnet-arm32
tar zxf aspnetcore-runtime-3.0.0-linux-arm.tar.gz -C $HOME/dotnet
tar zxf dotnet-sdk-3.0.100-linux-arm.tar.gz -C $HOME/dotnet
目前为止,你只能在dotnet-arm32里执行.NET命令。要让dotnet命令在任何位置都能跑,需要创建一个环境变量连接指向dotnet-arm32文件夹。
export DOTNET_ROOT=$HOME/dotnet-arm32
export PATH=$PATH:$HOME/dotnet-arm32
现在你可以运行dotnet --info试一下:
在Raspbian里创建.NET Core程序
现在,我们已经有了 SDK,我们不必使用另一台计算机来开发和发布应用程序。我们可以直接在树莓派上搞。
mkdir hello-netcore3
cd hello-netcore3/
dotnet new console
工程创建完成,NuGet 还原完成后,即可用dotnet run命令执行程序。
甚至你也可以凑合着用 nano 作为编辑器
sudo nano Program.cs
部署和运行 Core 网站
在更真实的场景中。如果没有 Raspbain 上的 IDE,您就无法开发复杂的 .NET Core 应用程序。我们通常先在电脑上开发和测试我们的应用程序,然后发布到树莓派来运行。
要运行 Core 应用程序,首先需要发布它。例如,从 Visual Studio 中,我有一个空 Core 应用程序,改了点Startup.cs 输出更多信息。
await context.Response.WriteAsync($"Empower every person and every organization on the planet to achieve more{Environment.NewLine}" +$".NET Core {Environment.Version}{Environment.NewLine}" +$"Environment.OSVersion: {Environment.OSVersion}{Environment.NewLine}" +$"Environment.Is64BitOperatingSystem: {Environment.Is64BitOperatingSystem}{Environment.NewLine}" +$"Environment.Is64BitProcess: {Environment.Is64BitProcess}", Encoding.UTF8);
使用 FDD + Portable 发布。因为我们树莓派上已经安装了原生运行时,因此根本无需使用 linux-arm 这个RID来发布。Portable即可运行。
把发布后的目录拷到树莓派上
现在,即可用dotnet dll名称.dll来跑你的 Core 网站
想要 Docker?
Docker Hub 上可以下载到微软官方的 .NET Core 3.0 ARM32 版运行时及SDK,如果你像我一样在树莓派上安装了docker,可以直接 docker run 欢乐多:
参考文档:/blog/InstallingTheNETCore2xSDKOnARaspberryPiAndBlinkingAnLEDWithSystemDeviceGpio.aspx