首页 文章

无法使用mono连接到SQlite

提问于
浏览
1

在我的程序中,我有这个简单的代码:

using System;
using System.Data;
using Mono.Data.SqliteClient;

.... 
IDbConnection cnx = new SqliteConnection("URI=file:reestr.db");
cnx.Open();
....

这就是我编译它的方式:

$ mcs Test.cs -r:System.Data.dll -r:mono.data.sqliteclient.dll

编译好了 . 但是当我用 ./Test.exe 运行它时,我收到此错误消息:

在程序集中缺少方法.ctor . 未处理的异常:System.IO.FileNotFoundException:无法加载文件或程序集'Mono.Data.SqliteClient,Version = 2.0.0.0,Culture = neutral,PublicKeyToken = 0738eb9f132ed756'或其中一个它的依赖关系 . 文件名:'Mono.Data.SqliteClient,Version = 2.0.0.0,Culture = neutral,PublicKeyToken = 0738eb9f132ed756'

我不确定我在这里做错了什么以及如何修复它 .

PS . 我正在使用Ubuntu作为我的操作系统 .

2 回答

  • 0

    看来 Mono.Data.SqliteClient 找不到原生的SQLite二进制文件:

    先决条件如果您没有SQLite,请下载它 . Windows和Linux都有二进制文件 . 您可以将.dll或.so放在应用程序二进制文件的旁边,或放在系统范围的库路径中 .

    参考:http://www.mono-project.com/docs/database-access/providers/sqlite/

    要为您的平台获取预编译的本机二进制文件(或源代码):

    此外,如果您安装了SQLite本机共享库,它们是否可以通过 dlopen 获得?如果没有,您可以分配 LD_LIBRARY_PATH env . var so Mono可以在运行时找到它们 .

    Linux共享库搜索路径从dlopen(3)手册页中,按以下顺序搜索程序所需的必要共享库:用户的LD_LIBRARY_PATH环境变量中以冒号分隔的目录列表 . 这是一种允许CLI程序找到本机共享库的常用方法 . 在/etc/ld.so.cache中缓存的库列表 . /etc/ld.so.cache是通过编辑/etc/ld.so.conf并运行ldconfig(8)创建的 . 编辑/etc/ld.so.conf是搜索其他目录的首选方法,而不是使用LD_LIBRARY_PATH,因为这样更安全(将木马库添加到/etc/ld.so.cache比使用它更困难将其插入LD_LIBRARY_PATH) . / lib,后跟/ usr / lib .

    Ubuntu Notes:

    $ sudo apt-get install sqlite
    $ ls -1  /usr/lib/libsqlite*
    /usr/lib/libsqlite.so.0
    /usr/lib/libsqlite.so.0.8.6
    $ export LD_LIBRARY_PATH=/usr/lib:$LD_LIBRARY_PATH
    $ mono ./Test.exe
    
  • 1

    我用这种方式在Mac上解决了这个问题 . 右键单击引用上的Mono.Data.Sqlite,然后单击本地副本 . 这使单声道复制DLL到调试文件夹,您的应用程序将找到该库 .
    OBS:抱歉我的英语不好 .

相关问题