在MacOS上用Visual Studio for Mac开发应用应选用哪个sqlite库?
macOS平台Sqlite连接报错问题解决方案
问题根源
- 基础代码语法错误:你当前代码仅声明了
SqlConnection类型变量未实例化,直接调用不存在的实例方法SqliteConnection()属于语法错误,会直接引发运行时异常。 - Mono.Data.Sqlite不兼容macOS桌面端:该库是为Xamarin.iOS、Xamarin.Android移动平台封装的适配库,macOS桌面端Mono运行时未实现其完整接口,因此调用
Open()方法会报「方法或操作未实现」。 - Microsoft.Data.Sqlite初始化缺失:该库依赖SQLitePCLRaw做原生绑定,未主动初始化原生绑定、依赖的原生sqlite库版本不匹配、路径权限不足都会引发类型初始值设定项异常。
- sqlite-net系列库缺少初始化步骤:使用sqlite-net、sqlite-net-pcl时必须先调用
SQLitePCL.Batteries.Init()初始化原生绑定,遗漏该步骤会直接导致连接创建失败。
修复步骤
- 先清理项目中重复安装的Sqlite相关NuGet包,仅保留
Microsoft.Data.Sqlite即可,避免多库类型冲突。 - 修正代码写法,补充初始化逻辑,使用有权限的存储路径:
using Microsoft.Data.Sqlite; using System.IO; public class AppDelegate : NSApplicationDelegate { public override void DidFinishLaunching(NSNotification notification) { // 初始化Sqlite原生绑定,必须放在所有Sqlite操作前执行 SQLitePCL.Batteries_V2.Init(); // 使用Application Support目录存储数据库,规避沙盒权限问题 string appDataPath = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData); string dbPath = Path.Combine(appDataPath, "Mydatabase.db"); // 正确实例化数据库连接对象 using var ctx = new SqliteConnection($"Data Source={dbPath}"); ctx.Open(); // 后续业务逻辑 } }
- 如果你的应用开启了沙盒机制,确认Entitlements配置中已开启对应目录的读写权限,若不需要对外暴露数据库文件,使用Application Support目录无需额外权限配置。
内容的提问来源于stack exchange,提问作者gem4511
相关产品推荐
相关产品推荐

