树莓派上SQLite.Interop.dll加载异常问题求助
树莓派armv7l上.NET Core 3.1 SQLite部署异常修复
问题根源
你遇到的System.EntryPointNotFoundException和System.DllNotFoundException本质是SQLite互操作库(SQLite.Interop.dll)的架构不匹配、版本不一致,或者部署时未正确包含导致的。你的树莓派是armv7l架构,对应.NET的runtime identifier是linux-arm,必须匹配这个架构的库。
具体解决步骤
确认NuGet包版本一致性
先检查项目里引用的SQLite相关包(Microsoft.Data.Sqlite或System.Data.SQLite)版本,确保所有依赖的SQLite类库版本统一,版本不匹配是常见的异常诱因。提取对应架构的官方Interop库
别随便找第三方下载,直接从你项目依赖的NuGet包中提取:- 找到本地NuGet缓存目录(Windows下是
C:\Users\<你的用户名>\.nuget\packages,Linux/macOS是~/.nuget/packages) - 定位到对应的SQLite包(比如
system.data.sqlite或sqlitepclraw.libsqlite3.linux-arm) - 进入
runtimes/linux-arm/native目录,复制里面的SQLite.Interop.dll到树莓派上的程序目录,或者放在程序目录下的runtimes/linux-arm/native子文件夹里(.NET会自动加载这个路径的库)
- 找到本地NuGet缓存目录(Windows下是
修正发布命令
你之前的命令有误,正确的发布命令应该是:dotnet publish -c Release -r linux-arm --self-contained false(如果要独立部署,把
--self-contained改成true)。指定-r linux-arm会让NuBuild自动打包对应架构的Interop库,避免手动复制的麻烦。系统依赖与权限检查
- 在树莓派上安装SQLite系统依赖:
sudo apt-get update && sudo apt-get install libsqlite3-dev -y - 给复制过去的
SQLite.Interop.dll加可执行权限:chmod +x /path/to/your/app/SQLite.Interop.dll
- 在树莓派上安装SQLite系统依赖:
验证架构匹配
把库传到树莓派后,用以下命令检查架构是否正确:file SQLite.Interop.dll输出应该包含
ARM, EABI5 version 1 (SYSV),这才是armv7l兼容的版本。如果显示arm64,说明你拿错了库。
内容的提问来源于stack exchange,提问作者Carnefix
相关产品推荐
相关产品推荐

