我的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
块无法正常工作?
注意:我还有以下内容:
<?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?>
这仍然不起作用。
答案 0 :(得分:7)
使用ifdef
或ifndef
时,必须在没有 $(var.)
语法的情况下声明变量。
<?ifndef TwoOnly ?>
<?include featureOne.wxi ?>
<?endif?>
这很有效。