【问题标题】:Tools to diagnose BadImageFormatException thrown for System.Data assembly in production?诊断在生产中为 System.Data 程序集抛出的 BadImageFormatException 的工具?
【发布时间】:2013-05-30 09:44:11
【问题描述】:

我在 Windows 桌面应用程序的生产机器上遇到以下异常:

无法加载文件或程序集 'System.Data, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' 或其之一 依赖关系。 文件已损坏。 (HRESULT 异常:0x8013110E)

我知道可能有多种原因,例如平台不匹配、目标 .net 框架不匹配等。但是,我可以在生产机器上运行哪些工具/检查来查明原因?

【问题讨论】:

  • 90% 是由于 x86 或 x64 架构问题。先试试这个。
  • 很难看出你是如何从这条消息中得到 BadImageFormatException 的。这远远超出了那个例外,没有什么微妙的“文件已损坏”通知。这是一个非常不寻常的例外,我在过去 8 年中第一次看到它。我会解释它试图表达的意思,最好尽快更换硬盘。在 superuser.com 上询问有关如何诊断磁盘问题的建议。

标签: c# .net clr desktop-application


【解决方案1】:

事实上,该应用程序是 64 位的。因此,请查看并在 IIS7 的应用程序池的高级设置中找到一个选项,名为“启用 32 位应用程序”。

设置为true后,一切正常。

注意:如果您想在 IIS6 中使用此功能,请注意 IIS6 不支持“每个应用程序池”。因此,如果您将 IIS6 设置为 32 位,则其所有应用程序池都将以 32 位模式运行。如果要在“每个应用程序池”的基础上进行设置,则必须升级到 IIS7。 要将 IIS6 设置为 32 位,请执行以下操作:

  1. 打开命令提示符并导航到 %systemdrive%\Inetpub\AdminScripts 目录。
  2. 输入以下命令:

cscript.exe adsutil.vbs 设置 W3SVC/AppPools/Enable32BitAppOnWin64 "true" 似乎在某些情况下,需要将上述命令中的“真”替换为 1。 有时还需要重置 IIS。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多