2012-04-10 67 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