Mono SQLite上的System.DllNotFoundException
我最近一直试图解决这个问题。 它正在我的Windows机器上运行,我从NuGet获得了SQLite,但……
当我将System.Data.SQLite.dll
和SQLite.Interop.dll
从我的Windows机器直接放入Linux服务器时,它说没有找到SQLite.Interop.dll
,但我确信我在下一个可执行文件中看到了它。
然后我尝试使用/p:UseInteropDll=false
编译System.Data.SQLite.dll
,但没有运气。 这次它说没有找到System.Data.SQLite.dll
。
这个“未被发现”的谜团是什么?
在Linux上使用Mono.Data.SQLite.dll
。 看看Mono手册在Linux上使用SQLite或在Mono 上 构建System.Data.SQLite.dll 。
你也可以映射DLL:
无需更改代码。 你可以自己构建它。
-
apt-get install build-essentials unzip
- 下载SQLITE源代码 – 您需要完整的源代码。 目前称为sqlite-netFx-full-source-1.0.104.0.zip 。
-
unzip
和cd Source
, -
chmod +x
compile-interop-assembly-release.sh
构建shell脚本,然后运行它./compile-interop-assembly-release.sh
。 – 它将在../bin
目录中构建一个.so
文件。 - 将此
.so
文件复制到您的应用程序所在的目录中 - 正常运行您的应用程序。
- 注意:确保您尝试运行的用户可以写入您的SQLite数据库及其内部的目录。
我在Windows中开始开发,但随后将应用程序移动到Mono(Ubuntu 14),这是SQLite提供程序无法按OP描述加载的地方。
我不得不使用以下命令重新编译System.Data.SQLite.dll:
MSBuild System.Data.SQLite.2012.csproj /t:Rebuild /p:UseInteropDll=false /p:UseSqliteStandard=true
但是,在此之后我得到以下exception:
提供程序未返回ProviderManifest实例。 方法
System.Data.SQLite.UnsafeNativeMethods:GetSettingValue (string,string)' is inaccessible from method
System.Data.SQLite.EF6.SQLiteProviderManifest获取:GetProviderManifestToken(string)’
要解决此问题,我必须使用以下命令重新编译System.Data.SQLite.EF6.dll:
MSBuild System.Data.SQLite.EF6.2012.csproj /t:Rebuild /p:UseInteropDll=false /p:UseSqliteStandard=true
将所有生成的文件复制到Mono项目的bin目录后,一切正常。
我使用的SQLite提供程序源代码版本是1.0.98.1。
希望这能节省很多时间……