C# 某些计算机上加载SQLite时出现BadImageFormatException

C# 某些计算机上加载SQLite时出现BadImageFormatException,c#,system.data.sqlite,badimageformatexception,C#,System.data.sqlite,Badimageformatexception,我在.NET4.0中创建了一个非常简单的控制台应用程序,它将作为计划任务运行。它查找在一定时间内未修改的本地文件,然后解析该文件,将记录插入MySQL数据库,并将该文件复制到网络。我正在使用本地SQLite数据库来跟踪哪些文件已被处理,但不幸的是,我在第一次SQLite操作时在一个系统上遇到了问题: System.BadImageFormatException: Could not load file or assembly 'System.Data.SQLite.dll' or one of

我在.NET4.0中创建了一个非常简单的控制台应用程序,它将作为计划任务运行。它查找在一定时间内未修改的本地文件,然后解析该文件,将记录插入MySQL数据库,并将该文件复制到网络。我正在使用本地SQLite数据库来跟踪哪些文件已被处理,但不幸的是,我在第一次SQLite操作时在一个系统上遇到了问题:

System.BadImageFormatException: Could not load file or assembly 'System.Data.SQLite.dll' or one of its dependencies.  is not a valid Win32 application. (Exception from HRESULT: 0x800700C1) File name: 'System.Data.SQLite.dll'
at FileDatabase.CreateDatabaseAndTable()
at Program.Main(String[] args)
此异常会在一个系统(Windows 7 x64 Home Premium和.NET 4.0已满)上引发,但不会在其他两个系统(开发系统+另一个系统,两个Windows 7 x64 Professional和.NET 4.0已满)上引发

通过浏览其他问题,我发现当程序以64位模式运行时会发生这种情况,因为SQLite DLL是32位版本。我检查的第一件事是VisualStudio配置管理器中的活动平台是x86。我还使用IL DASM验证输出exe是否为32位(.corflags 0x00000003//ILONLY 32bit required)。我更愿意将32位SQLite DLL和目标平台保持为x86,这样我就不必为32位和64位计算机制作不同版本的应用程序

我还了解到,由于DLL文件损坏,可能会发生此异常,但由于它在某些计算机上工作,我认为情况并非如此

我在问题系统上尝试过的其他没有帮助的东西:

  • 在GAC和Windows目录中搜索错误的SQLite DLL,但没有找到
  • 关闭AVG防病毒
  • 直接运行exe而不是已发布的ClickOnce应用程序
  • 卸载并重新安装ClickOnce应用程序

任何建议将不胜感激-谢谢

从system.data.sqlite.org/index.html/doc/trunk/www/downloads.wiki安装完整的安装程序包似乎解决了这个问题-它一定是一些不存在的依赖项(可能在Windows 7 Professional中,但不是Home?)。虽然这个解决方案并不适合大规模部署,但我真的只需要在这台计算机上使用它。感谢RoadBump让我走上了正确的道路。

从system.data.sqlite.org/index.html/doc/trunk/www/downloads.wiki安装完整的安装程序包似乎已经解决了这个问题-它一定是一些不存在的依赖项(可能在Windows 7 Professional中,但不是Home?)。虽然这个解决方案并不适合大规模部署,但我真的只需要在这台计算机上使用它。感谢RoadBump让我走上了正确的道路。

你没有这么说,但我想你已经尝试在坏掉的系统上替换Sqlite.dll了。对吗?@Steve是的,我卸载并重新安装了ClickOnce应用程序,并直接从本地复制的exe运行,DLL位于同一目录中。重复:@RoadBump虽然问题相同,但解决方案不同-我已经尝试了引用问题中的答案,但没有成功(见第3段)可能没有正确安装C++ ReDIST。我记得在一个问题中提到过,但现在找不到。尝试使用供应商的安装程序,而不仅仅是复制dll。您没有这么说,但我想您已经尝试在损坏的系统上替换Sqlite.dll。对吗?@Steve是的,我卸载并重新安装了ClickOnce应用程序,并直接从本地复制的exe运行,DLL位于同一目录中。重复:@RoadBump虽然问题相同,但解决方案不同-我已经尝试了引用问题中的答案,但没有成功(见第3段)可能没有正确安装C++ ReDIST。我记得在一个问题中提到过,但现在找不到。尝试使用供应商的安装程序,而不仅仅是复制dll。