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

Mac M1下ServiceStack ORMLite SQLite运行报错问题咨询

报错根因

当前引用的System.Data.SQLite携带的SQLite.Interop.dll是Windows平台专属原生动态库,MacOS作为类Unix系统无法识别加载该格式的库文件,运行时找不到对应Mac平台的原生实现就会抛出该异常。

适配方案

方案1:替换跨平台SQLite驱动(推荐,改造成本最低)

直接替换掉仅支持Windows的System.Data.SQLite,使用全平台兼容的SQLite实现,无需针对不同系统做单独配置:

  • 卸载项目中原有System.Data.SQLite相关的Nuget包
  • 安装ORMLite官方适配的跨平台SQLite包ServiceStack.OrmLite.Sqlite.Data,该包依赖微软维护的Microsoft.Data.Sqlite,原生支持Windows、MacOS、Linux
  • 调整数据库连接初始化代码,将原SQLite方言提供器替换为SqliteDataDialect.Provider即可,内存库连接字符串、仓储层CRUD逻辑完全不需要修改,原有测试代码可以直接复用。

方案2:保留原有驱动补全跨平台原生依赖

如果暂时不想替换现有驱动,可以通过补充跨平台原生绑定库解决加载问题:

  • 在测试项目中安装SQLitePCLRaw.bundle_e_sqlite3包,该包会自动携带全平台的SQLite原生库,自动适配运行时系统
  • 在测试项目的.csproj文件中添加如下配置,清理原有Windows专属互操作库的输出,避免冲突:
<Target Name="CleanWindowsNativeLib" AfterTargets="Build">
  <Delete Files="$(OutDir)SQLite.Interop.dll" />
</Target>
  • 在测试初始化逻辑(如测试类的构造函数、Assembly初始化钩子)中添加一行初始化代码,完成原生库绑定:
SQLitePCL.Batteries.Init();

执行完上述配置后,清空之前的构建缓存重新生成项目即可。

方案3:本地临时适配(无代码修改方案)

如果只是临时在Mac上跑测试,不想修改项目代码或依赖,可以通过系统SQLite库做软链接映射绕过加载检查:

  • 用Homebrew安装系统级SQLite:
brew install sqlite
  • 根据自己Mac的芯片架构找到brew安装的SQLite动态库路径:
    • Apple Silicon芯片默认路径:/opt/homebrew/opt/sqlite/lib/libsqlite3.dylib
    • Intel芯片默认路径:/usr/local/opt/sqlite/lib/libsqlite3.dylib
  • 进入报错提示的测试项目输出目录(示例路径为/Users/aaron/Projects/joinder/DASH/Test/ClientSiteData.Tests/bin/Debug/net6.0/),执行软链接命令,将运行时查找的库名映射到本地系统SQLite库:
# Apple芯片示例,Intel芯片替换成对应路径即可
ln -s /opt/homebrew/opt/sqlite/lib/libsqlite3.dylib libSQLite.Interop.dll

该方案仅对当前输出目录生效,清理构建缓存、切换分支重新生成后需要重新执行软链接,仅适合临时调试场景。

注意:所有方案配置完成后,建议先执行dotnet clean清空历史构建产物再重新生成运行,避免旧的Windows平台库残留导致加载异常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 04:21:33