1

我在 .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 应用程序。

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

4

1 回答 1

1

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

于 2013-01-29T02:09:20.150 回答