我正在开发一个使用SQLite3数据库并需要在Windows和Linux之间交叉兼容的C#项目。在Mono上运行Sqlite
Linux服务器正在使用版本3.2.8,我正在使用Managed Sqlite Library DLL 1.0.66.0。
我抄DLL到服务器和当我运行单myexec.exe它显示以下错误
未处理的异常:System.EntryPointNotFoundException: sqlite3_open_v2在(包装管理到本机) System.Data.SQLite.UnsafeNativeMethods:sqlite3_open_v2 (字节[],IntPtr的&,整型,IntPtr的)在System.Data.SQLite.SQLite3.Open (System.String strFilename,SQLiteOpenFlagsEnum标志的Int32 maxPoolSize,布尔usePool) 0x00000] in:0 at System.Data.SQLite.SQLiteConnection.Open() [0x00000]中:0在AudioManagement.DatabaseConnection..ctor()[0x00000] 在:0在 LinuxAudioManager.Configure.startConfiguration()[0x00000]在 :0在LinuxAudioManager.Program.Main (System.String [ ] args)[0x00000] in:0
当它试图创建数据库文件或打开连接时会引发此错误,我不确定它是哪一个。
下面是我用的,为了创建连接
conn = new SQLiteConnection("Data Source=database.db");
conn.Open()
感谢您的帮助,您可以提供的代码。
UPDATE 我刚刚用单声道记录执行了我的程序,发现了一些相当奇怪的东西。它似乎有加载lib文件的问题。输出低于
Mono-INFO:DllImport试图加载:'libsqlite3.so.0'。 Mono-INFO:
DllImport加载位置:'libsqlite3.so.0.so'。单INFO:的DllImport
加载库:“libsqlite3.so.0.so:无法打开共享对象
文件:没有这样的文件或目录”。 Mono-INFO:DllImport loading
库:'./libsqlite3.so.0.so'。单信息:错误的DllImport装载
库“./libsqlite3.so.0.so:无法打开共享对象文件:没有这样的
文件或目录”。单声道INFO:DllImport加载:'libsqlite3.so.0'。
单声道信息:搜索'sqlite3_open_v2'。 Mono-INFO:探测
'sqlite3_open_v2'。 Mono-INFO:探测'sqlite3_open_v2'。单声道信息:
探测'sqlite3_open_v2A'。 Mono-INFO:探测'sqlite3_open_v2A'。
Mono-INFO:DllImport试图加载:'libsqlite3.so.0'。 Mono-INFO:
DllImport加载位置:'libsqlite3.so.0.so'。单INFO:的DllImport
加载库:“libsqlite3.so.0.so:无法打开共享对象
文件:没有这样的文件或目录”。 Mono-INFO:DllImport loading
库:'./libsqlite3.so.0.so'。单信息:错误的DllImport装载
库“./libsqlite3.so.0.so:无法打开共享对象文件:没有这样的
文件或目录”。单声道INFO:DllImport加载:'libsqlite3.so.0'。
单声道信息:搜索'sqlite3_open_v2'。 Mono-INFO:探测
'sqlite3_open_v2'。 Mono-INFO:探测'sqlite3_open_v2'。单声道信息:
探测'sqlite3_open_v2A'。 Mono-INFO:探测'sqlite3_open_v2A'。
文件libsqlite3.so.0确实存在,但我不明白为什么mono会尝试加载 libsqlite3.so.0.so。
更新2 我认为第一个更新的错误消息是指向我在错误的方向,因为我已经创建了一个符号链接来匹配它找不到LIB文件和单不再说这couldn”加载一些东西。但是原来的EntryPointNotFoundException仍显示
更新3 感谢@bryanmac我已经改变使用Mono.Data.Sqlite DLL,而不是其下单在Linux上正常工作的代码。但是,在Windows中使用此DLL现在不再有效。 VS2010将建立它没有问题,但是当我试着执行它时它会显示错误
无法加载DLL“sqlite3的”:指定的模块找不到
我下载了一个sqlite3的.exe二进制从sqlite网站和可执行文件到我的程序的可执行文件,但我的程序仍然在Windows上显示错误消息。
您是否在Windows上试过Mono以查看它是否有效? – bryanmac 2012-01-11 18:21:19
http://code.google.com/p/csharp-sqlite/切换到C#SQLite,你会忘记这些原生的混乱。但是,此C#端口确实存在一些已知问题(请查看问题页面)。 – 2012-05-03 03:01:28