我在 .NET 4.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 位版本。我检查的第一件事是 Visual Studio 配置管理器中的活动平台是 x86。我还使用 IL DASM 来验证输出 exe 是否为 32 位(.corflags 0x00000003 // ILONLY 32BITREQUIRED)。我更愿意将 32 位 SQLite DLL 和目标平台保留为 x86,这样我就不必为 32 位和 64 位计算机制作不同版本的应用程序。
我还读到,由于 DLL 文件损坏,可能会发生此异常,但由于它适用于某些计算机,我认为情况并非如此。
我在问题系统上尝试过的其他没有帮助的事情:
- 在 GAC 和 Windows 目录中搜索错误的 SQLite DLL,但没有找到。
- 关闭 AVG 防病毒软件。
- 直接运行 exe 而不是已发布的 ClickOnce 应用程序。
- 卸载并重新安装 ClickOnce 应用程序。
任何建议将不胜感激 - 谢谢!