【问题标题】:Installer created by VS 2008 deployment project fails with error "System.BadImageFormatException"VS 2008 部署项目创建的安装程序失败并出现错误“System.BadImageFormatException”
【发布时间】:2019-03-20 17:03:26
【问题描述】:

我已经使用 Visual Studio 2008 创建了一个安装程序。VS 项目类型是部署项目。此安装程序在某些环境中失败,但在某些其他环境中也可以完美运行。

例如,安装程序在运行 Windows Server 2012 R2 Standard 的虚拟机中编译。当然在那里安装成功。但是,它在运行相同 Windows 版本的其他虚拟机中失败。

错误消息是:“错误 1001。初始化安装时发生异常:System.BadImageFormatException:无法加载文件或程序集‘文件:自定义操作.dll’或其依赖项之一。此程序集由运行时构建比当前加载的运行时更新,无法加载。”

安装程序解决方案中所有应用程序的目标框架为 3.5。此外,自定义操作库中的引用具有 .NET 版本 2.0 或 3.5。

失败的环境中缺少什么?从哪里开始搜索?

【问题讨论】:

  • BadImageFormatEx 带有 32/64 位冲突的味道。您的构建配置是什么,您的机器架构是什么,您安装的路径是什么,您是否在安装程序中使用任何托管自定义操作?

标签: c# visual-studio-2008 windows-installer visual-studio-setup-proje


【解决方案1】:

博客:可能是check this blog quickly。本质上是:1) bitness 32/642) corrupted binary file3) configuration issues (app.config)。

InstallUtilLib.dll:这是一个类似的答案:System.BadImageFormatException: Could not load file or assembly (from installutil.exe)。它链接到这个 MSDN 解释:64-bit managed custom actions throw a System.BadImageFormatException exception。似乎很有可能。


替代方案:真正的答案 - 恕我直言 - 对于此类项目将是 avoid Visual Studio Installer projects due to a number of known problemsThe WiX toolkit 是一个很好的开源替代方案。还有other, commercial options。还有一个替代版本,more elaborate details


一些链接

【讨论】:

    【解决方案2】:

    这个错误实际上只有两个原因:

    1. 您有 32 位(或 64 位)代码试图调用相反架构的程序集。在自定义操作调用中,您需要跟踪调用顺序并注意可能被 JIT 编译为系统架构的 AnyCpu 类型的程序集,而不是您将调用的程序集。

    2. 不兼容的 NET 架构。在您的情况下,您提到的程序集都是基于 NET 2.0 CLR 的。如果它们最终在 NET 4.0 CLR 中运行,它们将失败。查看启动条件以了解发生了什么可能会有所帮助。

    我还认为 Visual Studio 2008 不是安装项目的良好基础。 VS 社区版是免费的,将托管附加安装程序项目。当然 VS 2008 不知道 NET 4.0 CLR。

    【讨论】:

      猜你喜欢
      • 2011-07-25
      • 1970-01-01
      • 2021-11-08
      • 1970-01-01
      • 1970-01-01
      • 2017-08-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多