我在 WiX 3.7 版中设置了 32 位和 64 位版本。WiX 文档在充分解释这一点方面存在缺陷。在 的文档中Package/@Platform
,它说“不鼓励使用此属性;相反,请在 candle.exe 命令行中指定 -arch 开关”,但没有解释此参数的实际作用(至少我找不到) . 编译器的“文档”完全值得在“文档”一词周围加上引号,因为它基本上是一个存根(例如,与链接器文档不同)。对于历史记录,这是编译器文档的全部内容:
Windows Installer XML 编译器由蜡烛.exe 公开。Candle 负责将输入的 .wxs 文件预处理为针对 WiX 模式 wix.xsd 的有效格式良好的 XML 文档。然后,每个后处理的源文件都被编译成一个 .wixobj 文件。
编译过程相对简单。WiX 模式适用于简单的递归下降解析器。编译器依次处理每个元素,创建新符号、计算必要的引用并为 .wixobj 文件生成原始数据。
命令行帮助提供了一些帮助,但还不够。
-arch set architecture defaults for package, components, etc.
values: x86, x64, or ia64 (default: x86)
在一个相关的问题中,WiX 3.0中的平台识别,有一个答案暗示了可能发生的事情,但这还不够,我不知道它是否准确。
- 参数是否
-arch
与设置属性具有相同的效果Package/@Platform
,还是做得更多? - 该参数是否影响预处理器中可用的任何内容?特别是,它是否设置了
PLATFORM
预处理器变量?它是否设置了其他任何东西? - 什么是架构“默认”?显式
Package/@Platform
属性是否覆盖命令行?或相反亦然?或者(更好的是)如果平台声明不一致,是否会出现错误?
其中一些问题的答案似乎应该是显而易见的,而且我确实在写下这个问题时学到了一些东西。但我想要一个明确的答案,最好(提示)一个指向candle
命令行更新且准确的文档页面的链接。但是,我确实希望在有人回答时已经解决了这个问题,但是我会尽快节省其他人我花在解决这个问题上的时间。
另一个相关的问题,WIX:Package 元素的 Platform 属性真的被弃用了吗?, 谈论
Package/@Platform
属性,但没有解决命令行参数。
关于那个
PLATFORM
预处理器变量。现在显然是BUILDARCH
,尽管您很难从文档中知道它。
warning CNDL1034 : The built-in preprocessor variable '$(sys.PLATFORM)' is
deprecated. Please correct your authoring to use the new '$(sys.BUILDARCH)'
preprocessor variable instead.