2012-04-10 9 views
2

私はprogram.wxsファイルに次のスニペットている:私は、次のCOMAND使用して、これをコンパイルしていifndefセクションが機能しないのはなぜですか?

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

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

:、私は見ることができます

candle -dOneOnly=1 program.wxs 

コンパイルprogram.wixobjを見てみると、そのフィーチャーつの宣言がありますすべてがそこにあり、lightの実行後、両方の機能がリストされ、OneOnlyまたはTwoOnlyのいずれも設定されていないかのように、インストーラは正確に機能します。私の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の例を文字通り試しましたか? –

+0

私はコードで定義してもうまくいきません。私は '.chm'の例を文字通り試していませんが、私は行くつもりです。 – fredley

答えて

6

ifdefまたはifndefを使用して、変数が$(var.)構文なしを記載しなければなりません。

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

これは機能します。

+0

Super !!チュートリアルがこれについてはっきりしてほしいです。 –

関連する問題