Mono SQLite上的System.DllNotFoundException

我最近一直试图解决这个问题。 它正在我的Windows机器上运行,我从NuGet获得了SQLite,但……

当我将System.Data.SQLite.dllSQLite.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:

       

无需更改代码。 你可以自己构建它。

  1. apt-get install build-essentials unzip
  2. 下载SQLITE源代码 – 您需要完整的源代码。 目前称为sqlite-netFx-full-source-1.0.104.0.zip 。
  3. unzipcd Source
  4. chmod +x compile-interop-assembly-release.sh构建shell脚本,然后运行它./compile-interop-assembly-release.sh 。 – 它将在../bin目录中构建一个.so文件。
  5. 将此.so文件复制到您的应用程序所在的目录中
  6. 正常运行您的应用程序。
  7. 注意:确保您尝试运行的用户可以写入您的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。

希望这能节省很多时间……