2012-04-10 60 views
2

我在program.wxs文件下面的代码片段:为什么我的ifndef部分不工作?

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

<?ifndef $(var.OneOnly) ?> 
     <Feature Id="FeatureTwo" ... > 
      ... 
     </Feature> 
<?endif ?> 

我编译这个使用下面的COMAND:

candle -dOneOnly=1 program.wxs 

望着编译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?> 

的名字,即使OneOnly编译期间设置,显示为Both

编辑

我已经降低了我的病情复杂到the documentation显示的最小情况下:

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

这仍然无法正常工作。

+0

如果你在代码中定义一个变量而不是通过命令行传递值,它会工作吗?你是否真的尝试了WiX.chm的例子? – 2012-04-10 15:05:07

+0

如果我在代码中定义它不起作用。我从来没有尝试'.chm'的例子,但我会去... – fredley 2012-04-10 16:18:30

回答

6

当使用ifdefifndef,变量必须在不$(var.)语法来声明

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

This works。

+0

超级!祝教程清楚。 – 2013-08-16 23:31:38