使用sqlite-net-pcl创建SQLite表时触发System.MissingMethodException异常求助
解决SQLite.NET
MissingMethodException:找不到CreateTable(CreateFlags)方法 我之前处理过好几次类似的问题,这个System.MissingMethodException十有八九是NuGet包版本不一致或者依赖项冲突导致的,尤其是在用最新版sqlite-net-pcl的时候。结合你提供的代码和环境,给你几个具体的排查修复步骤:
1. 统一所有项目的SQLite相关包版本
这是最常见的诱因:你的共享项目(比如包含TransmodLocalDB的项目)用了最新的sqlite-net-pcl 1.6.292,但某个平台项目(Android/iOS/UWP)可能还停留在旧版本,或者依赖的SQLitePCLRaw系列包版本不匹配。
- 打开解决方案的NuGet包管理器,检查所有项目(包括共享项目和各个平台项目)的以下包版本是否完全一致:
sqlite-net-pclSQLitePCLRaw.coreSQLitePCLRaw.bundle_green(或其他bundle包)
- 如果有版本差异,把所有项目的这些包都升级到同一版本(建议直接用你当前的1.6.292对应的依赖版本)。
2. 彻底清理并重新安装NuGet包
有时候旧的编译缓存或者残留的包文件会导致版本混乱,按以下步骤操作:
- 卸载所有项目中的SQLite相关包;
- 手动删除解决方案下所有项目的
bin和obj文件夹; - 清理NuGet本地缓存(可以通过NuGet包管理器设置里的“清除所有NuGet缓存”选项);
- 重新给所有项目安装
sqlite-net-pcl 1.6.292,确保安装过程中没有报错。
3. 检查CreateTable方法的调用签名
确认你使用的CreateFlags枚举是否属于当前版本的sqlite-net-pcl:
- 确保代码中引用的是正确的命名空间:
using SQLite;,不要误引用了其他版本的SQLite库; - 在1.6.292版本中,
CreateTable的重载确实支持CreateFlags参数,但如果你的平台项目的SQLite实现有问题,可能会导致方法签名不匹配。可以尝试替换成无参数的重载先测试:
如果这个能正常执行,说明是database.CreateTable<Account>();CreateFlags相关的参数匹配问题,再去确认当前版本的CreateFlags枚举是否有变化。
4. 验证DependencyService返回的连接对象
你的异常在实例化TransmodLocalDB时触发,也就是在调用DependencyService.Get<ISQLite>().GetConnection()之后、创建表之前,这说明返回的SQLiteConnection实例可能来自旧版本的库:
- 检查平台项目中
ISQLite的实现类,确认它引用的是和共享项目相同版本的sqlite-net-pcl; - 确保平台项目的SQLite原生库(比如Android的
sqlite-android)版本也和NuGet包兼容。
按这些步骤排查下来,基本能解决这个方法找不到的问题。
内容的提问来源于stack exchange,提问作者Jen143
相关产品推荐
相关产品推荐

