从VS2010安装程序项目安装程序时出现System.BadImageFormatException

时间:2011-03-29 16:31:16

标签: visual-studio-2010 installer

尝试从VS2010 .NET 4 Installer项目安装Windows服务时出现此错误:

“初始化安装时发生异常:System.BadImageFormatException。无法加载文件[文件名] .exe或其依赖项之一。此程序集由比当前加载的运行时更新的运行时构建,无法加载。 “

我无法弄清楚造成这种情况的原因。我的解决方案中的所有项目都是针对.NET Framework 4编译的,安装程序解决方案依赖项需要.NET 4.我已经清理/重建了解决方案和项目无济于事。有什么东西显而易见吗?

5 个答案:

答案 0 :(得分:8)

如果您的安装程序正在安装64位dll,则会发生这种情况。

如果将64位托管自定义操作添加到安装项目,则Visual Studio构建过程会将32位版本的InstallUtilLib.dll作为InstallUtil嵌入到MSI中。反过来,加载32位.NET Framework以运行64位托管自定义操作并导致BadImageFormatException异常。

要解决此问题,请将32位InstallUtilLib.dll替换为64位版本。

  1. 从Windows Installer SDK打开Orca中生成的.msi。
  2. 选择二进制表。
  3. 双击单元格[二进制数据]以获取记录InstallUtil。
  4. 确保选中“从文件名读取二进制文件”,然后单击“浏览”按钮。
  5. 浏览至%WINDIR%\ Microsoft.NET \ Framework64 \ v2.0.50727。
  6. Framework64目录仅安装在64位平台上,对应于64位处理器类型。
  7. 选择InstallUtilLib.dll。
  8. 单击“打开”按钮。
  9. 单击“确定”按钮。

答案 1 :(得分:3)

您可能有错误的安装程序先决条件。转到安装项目的属性窗口,单击构建下的先决条件...,并确保已选中.NET Framework 4。您可能仍然检查.NET Framework 3.5 SP1。您可能也需要使用Windows Installer 4.1(在同一个对话框中)。

还要检查以确保在启动条件下.NET Framework版本指向4。

答案 2 :(得分:1)

也许您可以尝试创建一个[yourfile.exe] .config一边[yourfile.exe],如下所示:

<configuration>
  <startup>
    <supportedRuntime version="v4.0.30319" />
  </startup>
</configuration>

或者您安装的机器可能没有安装Framework 4?

答案 3 :(得分:1)

我避免了使用Orca破坏了安装程序(这使我的签名无效)。我刚刚在我的解决方案中添加了一个名为“InstallHelper”的新可执行项目,该解决方案在x86模式下编译并添加了自定义操作代码。然后,我将该项目的主要输出添加到安装程序,并将安装项目中的自定义操作设置为针对该主要输出而不是来自主应用程序的64位输出运行。现在,我的32位和64位安装项目运行良好。

答案 4 :(得分:0)

或者,如果您仍然遇到此问题,可以在Build-&gt; Configuration Manager下设置转到VS2010并将项目平台设置为“任何CPU”。

转到Solution Explorer并单击您的MSI安装项目,您将能够在属性下看到“TargetPlatform”。将其设置为x64。重建您的MSI项目并尝试一下。