.NET 6在macOS M1芯片上运行报SQLite.Interop.dll加载异常
问题根因
在M系列芯片(arm64e架构)的macOS设备上运行.NET 6程序时,System.Data.SQLite依赖的原生互操作库SQLite.Interop.dll没有提供适配arm64架构的版本,系统检索到的现有动态库是x86_64架构,和当前运行环境架构不匹配,就会抛出加载失败的异常。
可行解决方案
- 替换为适配arm64的官方SQLite驱动:直接卸载项目中已安装的
System.Data.SQLiteNuGet包,改装Microsoft.Data.Sqlite包。该包是微软官方维护的SQLite客户端,原生支持Apple Silicon全系列芯片的arm64架构,不需要额外配置原生库,API和System.Data.SQLite重合度极高,绝大多数场景下仅需要调整命名空间引用,原有数据库连接、CRUD的业务代码不需要修改就能正常运行,是成本最低的解决方式。 - 沿用原System.Data.SQLite包,通过Rosetta转译运行:M系列芯片macOS内置的Rosetta 2转译层可以运行x86_64架构的程序。你只需要找到平时启动项目用的终端、VS Code或者Rider等开发工具,右键点击应用图标选择「显示简介」,勾选「使用Rosetta打开」选项,重启开发工具后在项目目录执行
dotnet clean清理旧的编译产物,重新生成运行项目即可正常加载x86_64版本的互操作库。 - 自行编译arm64版本的原生互操作库:如果因为业务强依赖必须使用指定版本的
System.Data.SQLite,且不能使用Rosetta转译,可以拉取对应版本的System.Data.SQLite源码,在arm64架构的macOS环境下本地编译生成arm64版本的libSQLite.Interop.dylib,将编译产物放到项目输出目录并配置原生库加载规则即可,该方案操作复杂度最高,仅推荐特殊场景下使用。
注意:不要随意从非官方渠道下载单独的SQLite.Interop动态库替换,这类文件可能存在恶意代码,也容易出现版本不匹配导致的其他运行异常。
内容的提问来源于stack exchange,提问作者Hans
相关产品推荐
相关产品推荐

