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

标签 wix conditional-compilation

我的 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 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?>

这仍然不起作用。

最佳答案

当使用 ifdefifndef 时,变量必须没有 $(var.) 语法。

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

这有效。

关于wix - 为什么我的 ifndef 部分不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10089739/

相关文章:

wix - App.Config 应该是应用程序的伴随文件还是放在自己的组件中?

c++ - 定义 NDEBUG 时删除断言是否在内联函数之前发生?

dependencies - 如果相关功能被禁用,如何跳过依赖项

c# - 条件属性是否也消除子表达式?

c++ - 如何隐藏或禁用 WIX 安装程序中的取消按钮?

Wix 自定义操作仅在卸载时

WiX 次要升级删除 Windows 7 任务栏固定快捷方式

installation - 在Wix中,升级产品时,如何决定对安装了旧版本的机器进行文件覆盖和保存?

delphi - 为什么我的 {$IFDEF DEBUG} 条件在 Delphi 中不起作用?

c++ - 编写仅调试版本的断言函数而忽略副作用