我正在使用C#应用程序尝试连接SQLite数据库。应用程序使用System.Data.Sqlite库,版本为108。在Visual Studio 2017中,我的解决方案配置为Debug,解决方案平台为Any CPU。每当我构建和运行应用程序时,都会出现以下运行时异常:
异常没有被处理,应用程序将终止。
当然,在我的bin\Debug目录中有一个SQLite.Interop.dll文件。(如果没有,则异常将不同。)具体地说,有两个,分别位于名为x64和x86的自己的子目录中。我的假设是,由于解决方案平台设置为Any CPU,因此将使用x86目录中的文件。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被广泛使用,所以我必须想办法解决这个问题。
*编辑1:我在家里的电脑上尝试了这个项目,并观察到两个SQLite.Interop.dll文件之间的相同差异。x64版本有一个sqlite3_open_interop,而x86版本有一个_sqlite3_open_interop@20。然而,在那里没有出现这个问题。因此,这个名字混淆的问题似乎是一个红色诱饵。我仍然非常希望解决这个问题,并感谢那些在System.Data.Sqlite工作的人能够提供帮助!