2012-04-10 4 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 !! 튜토리얼에서 이에 대해 명확히하기를 바랍니다. –

관련 문제