我正在使用C#应用程序尝试连接到SQLite数据库。该应用程序使用库System.Data.Sqlite,版本108。在Visual Studio 2017中,我的解决方案配置为Debug,而我的解决方案平台为Any CPU。每当我构建并运行该应用程序时,都会收到以下运行时异常:
未处理异常,应用程序终止。
我的bin \ Debug目录中当然有一个SQLite.Interop.dll文件。 (如果没有,则例外将有所不同。)具体来说,有两个,每个子目录分别位于各自的x64和x86子目录中。我的假设是,由于解决方案平台设置为“任何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被广泛使用,所以我不得不认为有一种方法可以解决它。
* Edit1:我在家用计算机上尝试了此项目,并观察到两个SQLite.Interop.dll文件之间的相同差异。 x64版本具有sqlite3_open_interop,而x86版本具有_sqlite3_open_interop @ 20。但是,在那里没有发生问题。因此,显然这个名称不正确的“问题”是红色鲱鱼。我仍然对解决这个问题非常感兴趣,并感谢System.Data.Sqlite上的工作人员的协助!
答案 0 :(得分:0)
事实证明,问题是程序集被McAfee Host Intrusion Prevention阻止或破坏。活动日志中显示以下消息:
攻击类型:DISA McAfee-阻止运行意外的DLL文件 在用户AppData和ProgramData文件夹中(Sig ID = 7020)
这很奇怪,因为我认为我的程序没有在任何一个这样的文件夹中执行;实际上,正如我正在研究的那样,没有这样的文件夹。通过将程序移至“我的文档”,我能够解决此问题。
还值得注意的是,该异常并未暗示安全扫描程序的干扰。
S。我不知道这个答案通常有用吗,但我会留在这里。它可能会帮助某人。管理员可以视需要将其删除。