You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

树莓派无法运行自包含.NET 6应用:提示‘无此文件或目录’

问题:自包含.NET 6控制台应用部署到树莓派后无法执行

按照微软官方文档将.NET 6控制台应用部署为自包含应用到树莓派,执行步骤时遇到问题。

部署完成后在树莓派终端执行以下命令:

pi@babyminder:~/babyminder $ chmod +x PoC.BabyMinder.Gpio
pi@babyminder:~/babyminder $ ls -l
total 18668
-rw-r--r-- 1 pi pi     9824 Jul 19 23:09 libSystem.IO.Ports.Native.so
-rwxr-xr-x 1 pi pi 19089322 Jul 19 23:09 PoC.BabyMinder.Gpio
-rw-r--r-- 1 pi pi    10892 Jul 19 23:09 PoC.BabyMinder.Gpio.pdb
pi@babyminder:~/babyminder $ ./PoC.BabyMinder.Gpio
-bash: ./PoC.BabyMinder.Gpio: No such file or directory

发布配置文件(pubxml)内容:

<?xml version="1.0" encoding="utf-8"?>
<!--
https://go.microsoft.com/fwlink/?LinkID=208121.
-->
<Project>
  <PropertyGroup>
    <Configuration>Release</Configuration>
    <Platform>Any CPU</Platform>
    <PublishDir>bin\Release\net6.0\publish\linux-arm\</PublishDir>
    <PublishProtocol>FileSystem</PublishProtocol>
    <TargetFramework>net6.0</TargetFramework>
    <RuntimeIdentifier>linux-arm</RuntimeIdentifier>
    <SelfContained>true</SelfContained>
    <PublishSingleFile>true</PublishSingleFile>
    <PublishTrimmed>true</PublishTrimmed>
  </PropertyGroup>
</Project>

用于上传文件的scp命令:

scp -r bin/Release/net6.0/publish/linux-arm/* pi@babyminder:/home/pi/babyminder/

补充信息:

  • 仅掌握基础Unix知识
  • 树莓派安装的是全新64位Raspberry Pi OS Lite
  • 使用chmod 777权限仍无法解决问题
  • 省略chmod命令时,执行提示“-bash: ./PoC.BabyMinder.Gpio: Permission denied”(确认文件确实存在)
  • 部署框架依赖型应用可正常运行
解决方案

核心问题是运行时标识符(RuntimeIdentifier)与树莓派系统架构不匹配:你的树莓派是64位系统,但发布时指定了linux-arm(32位ARM架构),生成的二进制文件无法在64位系统上加载,系统抛出的“文件不存在”是加载器的误导性提示,实际是架构不兼容导致的依赖缺失。

解决步骤:

  1. 修改pubxml中的<RuntimeIdentifier>值为linux-arm64:
<RuntimeIdentifier>linux-arm64</RuntimeIdentifier>
  1. 重新发布应用:在Visual Studio中右键项目选择“发布”,或使用命令行执行:
dotnet publish -c Release -r linux-arm64 --self-contained true
  1. 重新上传发布后的文件到树莓派:
scp -r bin/Release/net6.0/publish/linux-arm64/* pi@babyminder:/home/pi/babyminder/
  1. 再次设置执行权限并运行:
chmod +x PoC.BabyMinder.Gpio
./PoC.BabyMinder.Gpio

说明:64位Raspberry Pi OS需要对应64位的ARM编译产物,linux-arm针对32位ARM设备,两者架构不兼容导致加载失败。框架依赖型应用能运行,是因为树莓派上安装的.NET运行时是64位版本,可自动适配系统架构。


内容的提问来源于stack exchange,提问作者fharreau

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 07:36:17