为什么我的ifndef部分不起作用?

fre*_*ley 2 wix conditional-compilation

我的program.wxs文件中有以下代码段:

<?ifndef $(var.TwoOnly) ?>
        <Feature Id="FeatureOne" ... >
          ...
        </Feature>
<?endif ?>

<?ifndef $(var.OneOnly) ?>
        <Feature Id="FeatureTwo" ... >
          ...
        </Feature>
<?endif ?>
Run Code Online (Sandbox Code Playgroud)

我正在使用以下命令编译它:

candle -dOneOnly=1 program.wxs
Run Code Online (Sandbox Code Playgroud)

望着编译program.wixobj,我可以看到两个特性的声明都在那里,并运行后light,这两种功能都列出来,并在安装程序的功能完全一样,如果没有OneOnlyTwoOnly分别设置.为什么我的ifndef块无法正常工作?

注意:我还有以下内容:

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

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

编辑

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

<?ifndef $(var.TwoOnly) ?>
  <?include featureOne.wxi ?>
<?endif?>
Run Code Online (Sandbox Code Playgroud)

这仍然不起作用.

fre*_*ley 7

使用ifdefor时ifndef,必须在没有 $(var.)语法的情况下声明变量.

<?ifndef TwoOnly ?>
  <?include featureOne.wxi ?>
<?endif?>
Run Code Online (Sandbox Code Playgroud)

这有效.