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を見ると、機能 2 の宣言がすべてそこにあることがわかります。実行後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ます。
編集
ドキュメントに示されている最小限のケースに自分の状態の複雑さを減らしました:
<?ifndef $(var.TwoOnly) ?>
<?include featureOne.wxi ?>
<?endif?>
これはまだ機能しません。