在Raspbian系统上部署.NET项目遇启动文件缺失问题
解决.NET自包含发布缺失控制台入口DLL的问题
先确认发布的目标项目
- 务必选中控制台应用项目而非类库项目执行发布操作。类库项目发布只会生成类库DLL,根本不会产出入口程序集。如果用Visual Studio,就在解决方案资源管理器里右键点控制台应用项目(别点解决方案或类库)选“发布”;用命令行的话,先切换到控制台项目的根目录(就是有
.csproj文件的文件夹)再执行发布命令。
修正CLI发布命令(如果用命令行发布)
要是你用dotnet publish命令,参数必须准确:
- 先切到控制台项目目录:
cd /path/to/Project.POC.Console - 执行正确的自包含发布命令:
注:dotnet publish -c Release -r linux-arm --self-contained truelinux-arm适配树莓派3 B+的架构,也可以试试linux-arm64,取决于你装的.NET版本和系统位数;--self-contained true会打包运行时,就算设备没装.NET也能跑,不过你已经装了,这么做也没问题。
检查控制台项目的.csproj配置
打开控制台应用的.csproj文件,确认这几点:
- 项目类型是
<OutputType>Exe</OutputType>,不能是<OutputType>Library</OutputType> - 有正确的
<TargetFramework>配置(比如net6.0、net7.0),且和你在树莓派上装的.NET版本兼容 - 如果自定义过发布配置,别把输出路径误设成了类库的目录
验证发布结果
发布完成后,去控制台项目的bin/Release/<TargetFramework>/linux-arm/publish目录(或你指定的发布路径)看看,应该有这些文件:
- 控制台应用的主DLL(比如
Project.POC.Console.dll) - 自包含运行时的相关文件(像
dotnet可执行文件、系统依赖库之类的) - 你那两个自定义类库的DLL
树莓派上的运行步骤
把整个发布目录复制到Raspbian设备后,有两种运行方式:
- 因为你已经装了.NET,用框架依赖模式直接跑:
dotnet Project.POC.Console.dll - 自包含模式下,直接执行生成的可执行文件(不用
dotnet命令):chmod +x Project.POC.Console ./Project.POC.Console
内容的提问来源于stack exchange,提问作者Jakub Sluka
相关产品推荐
相关产品推荐

