在我的程序中,我有以下简单代码:

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

09-11 19:38
查看更多