VS2017中Wix项目Build属性变量未传递至candle的问题
解决Wix Bundle中构建变量无法传递到Candle的问题
我来帮你搞定这个变量传递的坑——这种情况我碰到过好多次,VS的UI设置有时候确实不会自动把变量同步到Wix的编译流程里。下面给你两种可靠的解决方法:
方法1:用Wix原生变量传递(推荐)
直接在wixproj文件里配置WixVariable,完美适配Wix的变量系统:
- 打开你的wixproj文件,找到对应配置的
<PropertyGroup>节点(比如你提到的Condition=" '$(Configuration)|$(Platform)' == 'Release|x86' "那一段) - 在这个PropertyGroup里添加一行:
<WixVariable Name="siteloc" Value="你的目标站点URL" /> - 回到bundle.wxs里,原来的
<Variable Name="SETTINGPROVIDERURL" Value="$(var.siteloc)"/>不需要修改,编译时就能正确读取到值。
方法2:用预处理器变量传递
如果你更习惯预处理器的方式,要确保预处理器定义被传递到Candle工具:
- 同样打开wixproj的对应PropertyGroup节点,添加或修改Candle的命令行参数:
<CandleToolArguments>-d siteloc="你的目标站点URL"</CandleToolArguments> - 注意!这时候bundle.wxs里的引用语法要改成预处理器格式:
<Variable Name="SETTINGPROVIDERURL" Value="!(preprocessor.siteloc)"/>
为什么之前的设置没生效?
VS「属性>生成」选项卡里的设置,有时候不会自动映射到Wix项目的编译参数中。尤其是Wix变量,必须在wixproj里显式配置WixVariable节点,才能被Candle识别。你可以编译时查看输出窗口的Candle命令行,确认参数里是否包含了你的变量——如果没看到,说明配置没生效。
内容的提问来源于stack exchange,提问作者ToddK
相关产品推荐
相关产品推荐

