sqlite.net PCL抛出TypeInitalizationException

时间:2015-05-22 14:20:20

标签: c# sqlite sqlite-net

我们从sqlite-net更改为sqlite.net PCL版。我们的项目与旧项目合作得很好 - 使用PCL版本,我们现在必须通过使用明确声明我们的平台。

var conn = new SQLiteConnection(new SQLitePlatformWin32(),  Path.Combine(folderPath, dbName));

但现在,当我打电话给这一行时,我们得到一个

  

SQLite.Net.Platform.Win32.dll中发生了'System.TypeInitializationException'类型的第一次机会异常

     

其他信息:“SQLite.Net.Platform.Win32.SQLiteApiWin32Internal”的类型初始化程序引发了异常。

内部异常告诉我们

  

{“无法加载原生sqlite库”}

堆栈跟踪:

  

at SQLite.Net.Platform.Win32.SQLiteApiWin32Internal.sqlite3_open_v2(Byte [] filename,IntPtr& db,Int32 flags,IntPtr zvfs)

     

at SQLite.Net.Platform.Win32.SQLiteApiWin32.Open(Byte [] filename,IDbHandle& db,Int32 flags,IntPtr zvfs)

     

at SQLite.Net.SQLiteConnection..ctor(ISQLitePlatform sqlitePlatform,String databasePath,SQLiteOpenFlags openFlags,Boolean storeDateTimeAsTicks,IBlobSerializer serializer,IDictionary 2 tableMappings, IDictionary 2 extraTypeMappings,IContractResolver resolver)

     

at SQLite.Net.SQLiteConnection..ctor(ISQLitePlatform sqlitePlatform,String databasePath,Boolean storeDateTimeAsTicks,IBlobSerializer serializer,IDictionary 2 tableMappings, IDictionary 2 extraTypeMappings,IContractResolver resolver)

然而,sqlite3.dll位于应用程序文件夹中,它实际上与unforked版本一起使用。我玩了编译x86和x64,并为Win32下载了最新的sqlite3.dll,但都没有成功。我们缺少什么?

1 个答案:

答案 0 :(得分:18)

我在测试项目中遇到了同样的问题。 通过为SQLitePlatformWin32添加包http://www.nuget.org/packages/System.Data.SQLite.Core解决了这个问题。

虽然未在实际版本中列为依赖项,但它位于平台的nuget包(http://www.nuget.org/packages/SQLite.Net.Platform.Win32/)之前的其中一个

此外:如果使用SQLitePlatformGeneric,应将sqlite3.dll的副本放在输出目录中。