树莓派3的Windows IoT中ASP.NET Core数据库无法工作,如何解决?
解决树莓派3 Windows IoT上ASP.NET Core应用的
sni.dll找不到问题 嘿,这个问题我之前帮朋友排查过,核心原因是sni.dll(SQL Server Native Interface组件)在ARM架构的Windows IoT系统上没有对应的预编译版本——早期的System.Data.SqlClient对ARM平台的支持确实比较拉胯。给你几个靠谱的解决办法:
1. 切换到Microsoft.Data.SqlClient(推荐)
微软推出的新一代SqlClient库专门优化了跨架构兼容性,对ARM平台的支持完善很多。操作步骤很简单:
- 先卸载项目里的
System.Data.SqlClientNuGet包 - 安装最新版的
Microsoft.Data.SqlClient,可以用NuGet包管理器搜索安装,或者在Package Manager Console里执行:Install-Package Microsoft.Data.SqlClient - 把代码里的命名空间替换一下:将
using System.Data.SqlClient;改成using Microsoft.Data.SqlClient;
其他数据库操作的API基本和旧库一致,不需要大改代码,就能自动适配ARM架构的依赖。
2. 手动部署ARM版本的sni.dll
如果你不想替换数据库客户端库,可以手动找对应ARM架构的sni.dll部署:
- 去NuGet官网下载对应你.NET Core版本的
System.Data.SqlClient包(选择ARM架构的版本) - 解压包后,找到
runtimes/win-arm/native/sni.dll文件 - 将这个文件复制到你的ASP.NET Core应用的发布输出目录(比如
bin/Debug/net6.0/win-arm/),或者通过远程桌面复制到树莓派Windows IoT的C:\Windows\System32目录(需要管理员权限)
3. 改用SQLite作为本地数据库(适合轻量场景)
如果你的应用不需要连接远程SQL Server,只是本地存储数据,SQLite是更省心的选择——它完全不需要sni.dll这类依赖,对ARM架构的支持非常好:
- 安装
Microsoft.EntityFrameworkCore.SqliteNuGet包 - 配置你的DbContext使用SQLite,比如:
这种方式零额外依赖,部署起来特别轻便。protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) { optionsBuilder.UseSqlite("Data Source=localdb.db"); }
额外注意事项
- 发布应用时,一定要选择ARM作为目标架构,别选x86/x64。在Visual Studio里可以在发布配置里设置,或者用命令行发布:
dotnet publish -r win-arm --self-contained - 确保你的树莓派Windows IoT系统是较新的版本,旧版本对.NET Core ARM的兼容性可能存在问题。
内容的提问来源于stack exchange,提问作者SHAMAL MANOJ
相关产品推荐
相关产品推荐

