【问题标题】:BadImageFormatException on SQLite load on certain computer在某些计算机上加载 SQLite 时出现 BadImageFormatException
【发布时间】:2013-01-15 18:47:09
【问题描述】:

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

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

【问题讨论】:

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

标签: c# system.data.sqlite badimageformatexception


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2023-03-26
    • 1970-01-01
    • 2011-06-07
    • 2017-09-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-19
    • 2012-04-29
    相关资源
    最近更新 更多