我的 program.wxs
文件中有以下片段:
<?ifndef $(var.TwoOnly) ?>
<Feature Id="FeatureOne" ... >
...
</Feature>
<?endif ?>
<?ifndef $(var.OneOnly) ?>
<Feature Id="FeatureTwo" ... >
...
</Feature>
<?endif ?>
我正在使用以下命令编译它:
candle -dOneOnly=1 program.wxs
查看编译后的program.wixobj
,我可以看到Feature Two的声明都在那里,运行light
后,列出了两个特性,安装程序函数就好像没有设置 OneOnly
或 TwoOnly
一样。为什么我的 ifndef
block 不能正常工作?
注意:我还有以下内容:
<?ifdef $(var.OneOnly) ?>
<?define productName = One Only ?>
<?else?>
<?ifdef $(var.TwoOnly) ?>
<?define productName = Two Only ?>
<?else?>
<?define productName = Both ?>
<?endif?>
<?endif?>
即使在编译期间设置了 OneOnly
,名称也会显示为 Both
。
编辑
我已将我的条件的复杂性降低到 the documentation 中所示的最小情况:
<?ifndef $(var.TwoOnly) ?>
<?include featureOne.wxi ?>
<?endif?>
这仍然不起作用。
最佳答案
当使用 ifdef
或 ifndef
时,变量必须没有 $(var.)
语法。
<?ifndef TwoOnly ?>
<?include featureOne.wxi ?>
<?endif?>
这有效。
关于wix - 为什么我的 ifndef 部分不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10089739/