在我的程序中,我有以下简单代码:
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作为操作系统。
最佳答案
看来Mono.Data.SqliteClient
找不到本机SQLite二进制文件:
前提条件如果没有SQLite,请下载它。有
Windows和Linux的二进制文件。您可以将.dll或.so放在一边
您的应用程序二进制文件或系统范围的库路径中。
参考:http://www.mono-project.com/docs/database-access/providers/sqlite/
要获取平台的预编译本机二进制文件(或源代码),请执行以下操作:
http://www.sqlite.org/download.html
另外,如果您安装了SQLite本机共享库,是否可以通过dlopen
使用它们?如果没有,您可以分配LD_LIBRARY_PATH
环境。 var,这样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注意事项:
$ 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