首页 > 解决方案 > “无法在 DLL 'SQLite.Interop.dll' 中找到名为 'sqlite3_open_interop' 的入口点。”

问题描述

我正在使用 C# 应用程序尝试连接到 SQLite 数据库。该应用程序使用库 System.Data.Sqlite,版本 108。在 Visual Studio 2017 中,我的解决方案配置是调试,我的解决方案平台是任何 CPU。每当我构建和运行应用程序时,我都会收到以下运行时异常:

在此处输入图像描述

异常未处理,应用程序终止。

当然,我的 bin\Debug 目录中有一个 SQLite.Interop.dll 文件。(如果没有,例外情况会有所不同。)具体来说,有两个,每个都在它们自己的名为 x64 和 x86 的子目录中。我的假设是使用 x86 目录中的文件,因为解决方案平台设置为任何 CPU。SQLite.Interop.dll 程序集的版本与 System.Data.SQLite.dll 的版本匹配,为 1.0.108.0。

当我使用以下命令询问程序集时:

dumpbin /exports SQLite.Interop.dll

我确实在 x64 版本的程序集的输出中找到了以下行:

175   AE 00040750 sqlite3_open_interop

但在 x86 版本的输出中我没有。相反,我发现这一行:

175   26 00037F10 _sqlite3_open_interop@20

这是接近,但不是匹配。所以确实没有程序集暴露出 sqlite3_open_interop 这样的方法。

我已经尝试了将解决方案平台更改为 x64 的明显解决方案,但该更改导致了另一个我不想处理的异常 (BadImageFormatException)。

我尝试删除对 System.Data.SQLite 的引用并使用 Nuget 添加最新版本 1.0.111.0,然后清理并重建解决方案,但都没有效果。同样的问题再次出现。

任何人都可以提出解决这个问题的方法吗?我相信 SQLite 被广泛使用,所以我必须认为有一种方法可以解决它。

*Edit1:我在家用计算机上尝试了这个项目,并观察到两个 SQLite.Interop.dll 文件之间的相同差异。x64 版本有一个 sqlite3_open_interop,而 x86 版本有一个 _sqlite3_open_interop@20。但是,问题并没有出现在那里。所以显然这个被破坏的名字“问题”是一个红鲱鱼。我仍然对解决这个问题非常感兴趣,并感谢从事 System.Data.Sqlite 工作的人的帮助!

标签: c#sqlitesystem.data.sqlite

解决方案


虽然它是一个旧线程,但其他人可能会再次面临类似的问题。就我而言,当我尝试使用密码创建连接字符串时会发生此错误,因为在最新版本的 sqlite 中,ecnryption 是一项付费功能,这就是它在免费版本中不起作用的原因。所以,为了规避这个问题,我恢复了旧版本的 sqlite(从我的旧项目中挑选),它工作正常。

在您的项目中添加以下参考:

  • System.Data.SQLite.dll

将以下文件复制到二进制文件夹中:

  • System.Data.SQLite.dll.config(可选)

  • System.Data.SQLite.xml(可选)

  • x64\SQLite.Interop.dll

  • x86\SQLite.Interop.dll

其中“x64”和“x86”是文件夹

  • nuget 上可用的软件包有同样的问题,所以你需要旧的 dll

推荐阅读