2

我的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,这两个功能都列出了,并且安装程序的功能与两者都没有设置OneOnlyTwoOnly没有设置完全一样。为什么我的ifndef块不能正常工作?

注意:我还有以下内容:

<?ifdef $(var.OneOnly) ?>
  <?define productName = One Only ?>
<?else?>
  <?ifdef $(var.TwoOnly) ?>
    <?define productName = Two Only ?>
  <?else?>
    <?define productName = Both ?>
  <?endif?>
<?endif?>

名称,即使OneOnly在编译期间设置,也会显示为Both.

编辑

我已将条件的复杂性降低到文档中显示的最小情况:

<?ifndef $(var.TwoOnly) ?>
  <?include featureOne.wxi ?>
<?endif?>

这仍然不起作用。

4

1 回答 1

7

使用ifdeforifndef时,必须不使用 $(var.)语法声明变量。

<?ifndef TwoOnly ?>
  <?include featureOne.wxi ?>
<?endif?>

这行得通。

于 2012-04-11T09:56:35.850 回答