使用Visual Studio 2019将ASP.NET Core发布为linux-arm64程序

  • A+
所属分类:.NET技术
摘要

前段时间入手了一台树莓派4B,一直闲置未使用,最近工作需要,要在上面跑下.NET Core程序,由于树莓派4B使用的是ARM架构,并且支持64位操作系统,为了充分发挥树莓派性能,我的这台树莓派安装了官方最新的64位树莓派系统,在使用vs2019发布ASP.NET Core程序时,发现目标运行时中没有linux-arm64选项


前言

前段时间入手了一台树莓派4B,一直闲置未使用,最近工作需要,要在上面跑下.NET Core程序,由于树莓派4B使用的是ARM架构,并且支持64位操作系统,为了充分发挥树莓派性能,我的这台树莓派安装了官方最新的64位树莓派系统,在使用vs2019发布ASP.NET Core程序时,发现目标运行时中没有linux-arm64选项

使用Visual Studio 2019将ASP.NET Core发布为linux-arm64程序

之前看到网上说64位系统可以跑32位程序,于是直接将目标运行时`linux-arm`选中进行发布,将发布后程序部署到树莓派运行

使用Visual Studio 2019将ASP.NET Core发布为linux-arm64程序

 可以看出,程序报应用程序格式错误,说明这种方式在树莓派不行,必须要生成64的应用程序才能运行。

生成ARM64位程序

 去官网查看(https://docs.microsoft.com/zh-cn/dotnet/core/rid-catalog#linux-rids),发现是支持linux-arm64运行时的,可以通过dotnet命令进行发布,在项目根目录(.csproj所在目录)下启动命令行工具

dotnet publish -c Release -r linux-arm64

对于用惯了Visual Studio的人来说,每次发布时都要去敲命令比较麻烦,有没有办法实现在vs2019发布linux-arm64程序呢,我又去官网找了下,在这里(https://docs.microsoft.com/zh-cn/dotnet/core/deploying/deploy-with-vs?tabs=vs156#self-contained-deployment-without-third-party-dependencies)找到了解决办法。

打开项目文件,我这里为DotNetCorePubLinuxArm64.csproj,添加<RuntimeIdentifiers>linux-arm64</RuntimeIdentifiers>

<Project Sdk="Microsoft.NET.Sdk.Web">     <PropertyGroup>         <!-- 这里添加运行时环境 -->         <RuntimeIdentifiers>linux-arm64</RuntimeIdentifiers>         <TargetFramework>netcoreapp3.1</TargetFramework>     </PropertyGroup> </Project>

使用Visual Studio 2019将ASP.NET Core发布为linux-arm64程序

 在vs中重新发布应用程序,可以看到此时发布窗口中目标运行时选项框已经有了linux-arm64选项,选中后发布程序,并在树莓派中运行

使用Visual Studio 2019将ASP.NET Core发布为linux-arm64程序

可以看到此时程序已经正常运行,问题解决。

如果你手上刚好也有一台树莓派,想要亲自动手试试,代码地址:

gitee:https://gitee.com/gyhgis/DotNetCorePubLinuxArm64

github:https://github.com/gyhgis/DotNetCorePubLinuxArm64