2010-01-25 5 views
5

J'essaie de définir une valeur par défaut pour une propriété MSBuild. Disons que je commence par ceci:Pourquoi ce script MSBuild ne définit-il pas la propriété comme je le souhaite?

<Choose> 
    <When Condition="..something.."> 
     <PropertyGroup> 
      ... 
      <MySetting>true</MySetting> 
     <PropertyGroup> 
    </When> 
    ... 
</Choose> 

Si la condition n'est pas vraie, alors MySetting sera ''. Donc, cela ne devrait-il pas être faux?

<PropertyGroup> 
    <MySetting Condition="'$(MySetting)'==''">false</MySetting> 
</PropertyGroup> 

Plus tard, je voudrais utiliser MySetting dans une condition sans avoir à tester == « true », comme ceci:

<PropertyGroup Condition="$(MySetting)"> 
    ... 
</PropertyGroup> 

Pourtant, quand je charge ce projet dans Visual Studio il se plaint que la condition spécifiée "$ (MySetting)" évalue à "" au lieu d'un booléen.

Il semble donc que ma condition qui vérifie que '' assigne la propriété à false est incorrecte. Qu'est-ce que je fais mal?

Répondre

6

En MSBuild, vous traitez avec des chaînes afin que vous obtenez le '' au lieu de false ... si vous voulez le défaut de 'false' et passer outre via la ligne de commande, déclarer juste un groupe de propriété au-dessus de votre bloc d'état existant le script:

<PropertyGroup> 
    <MySetting>false</MySetting> 
</PropertyGroup> 

Votre bloc de condition ci-dessous peut définir à true, ou vous pouvez également définir via la ligne de commande, comme ceci:

MSBuild.exe MyMSBuildFile.csproj /p:MySetting=true 
+0

Ceci est une meilleure façon de définir la valeur par défaut. Je vais le faire à la place, merci. Mais je ne comprends toujours pas pourquoi le bloc central de code dans la question initiale ne définit pas la propriété à false. Je teste contre '' pour définir la propriété sur false. Pourquoi ça ne marche pas? – scobi

+0

@Scott Bilas: Êtes-vous en train de dire après la '' MySetting Condition = "'$ (MySetting)' == ''"> false 'fonctionne, la valeur est toujours' '' ''? –

+0

Oui, selon le compilateur. C'est comme si cet ensemble de propriétés ne se produisait jamais. – scobi

3

Si vous voulez déclarer par défaut pour les meilleures propriétés la n en utilisant est de le faire avons choisi sur la propriété comme:

<PropertyGroup> 
    <MySetting Condition=" '$(MySetting)'=='' ">true</MySetting> 
</PropertyGroup> 

également pour les conditions Enveloppez toujours le côté gauche et à droite « », même si vous faites affaire avec ce qui devrait être des valeurs booléennes. Changez donc votre deuxième groupe de propriétés pour qu'il ressemble à:

<PropertyGroup Condition=" '$(MySetting)'=='true' "> 
</PropertyGroup> 
Questions connexes