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?>
これはまだ機能しません。