应用程序是否依赖于编译环境?

时间:2018-01-26 07:54:06

标签: wix windows-installer installer .net-framework-version msiexec

我们的MSI安装程序中有System.BadImageFormatException。我已经阅读了有关目标框架的内容,但我们已经检查过,它已经定位了正确的框架(.NET Framework 4.5与我们的QA机器相同)。

我们拥有完全相同的源代码,但是我们的构建团队编译的msi安装程序的结果'失败,但我们编译的msi安装程序' dev'作品。问题是,构建和编译应用程序的环境是否会影响输出(例如:msi安装程序)?

1 个答案:

答案 0 :(得分:1)

此错误基本上有两个原因:

  1. 从32位代码到64位的跨架构调用(反之亦然)。不同的体系结构需要不同的MSI设置Heath Stewarts blog,因此32位设置中的所有内容(尤其是托管自定义操作代码)应该在64位安装中显式为32位且显式为64位。例如,当x64系统遇到AnyCpu代码时,它可能会加载X64运行时,然后对32位程序集的引用将失败并出现此错误。

  2. .NET框架运行时尝试加载"错误"框架。 NET 4运行时稍微向后兼容,因此当代码期望NET 2运行时遇到NET 4引擎时,您最有可能遇到此错误。魔鬼在这里的细节,但再次,这很像建筑问题。如果有任何东西加载NET 2运行时并且调用序列试图调用NET 4程序集以在2.0 FW中运行它将失败并显示此消息。

  3. 话虽如此,但不清楚你是如何调用托管代码的,无论是通过DTF还是其他东西(例如Visual Studio InstallUtilLib机制)。最后,您构建的机器对最终的运行时环境没有任何影响。它与在一台机器上工作但在另一台机器上运行的代码文件没有什么不同,因为(例如)它无法找到C ++运行时。问题不在于构建机器,它是目标机器的环境。