2

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ますTwoOnlyifndefブロックが正しく機能しないのはなぜですか?

注:次のものもあります。

<?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?>

これはまだ機能しません。

4

1 に答える 1

7

ifdefまたはを使用する場合ifndef、変数は構文なしで記述する必要があります。 $(var.)

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

これは機能します。

于 2012-04-11T09:56:35.850 に答える