2010-01-25 9 views
5

Estoy tratando de establecer un valor predeterminado para una propiedad MSBuild. Digamos que comienzo con esto:¿Por qué este script de MSBuild no establece la propiedad de la manera que yo esperaba?

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

Si la condición no es verdadera, entonces MySetting será ''. Entonces, ¿no debería esto establecerlo en falso?

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

Más tarde, me gustaría utilizar MySetting en un condicional sin tener que probar == 'verdadera', así:

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

Sin embargo, cuando la carga este proyecto en Visual Studio se queja de que la condición especificada "$ (MySetting)" se evalúa como "" en lugar de un booleano.

Parece que mi condición que comprueba que '' asignar la propiedad a falso es incorrecta. ¿Qué estoy haciendo mal?

Respuesta

6

En MSBuild, que está tratando con cadenas para que pueda obtener el '' en lugar de false ... si quieres por defecto a 'false' y anular a través de la línea de comandos, simplemente declarar un grupo de propiedades por encima de su condición existente en el bloque la secuencia de comandos:

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

su bloque condición continuación puede establecer esto en verdad, o también puede configurar a través de la línea de comandos, así:

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

Esta es una mejor manera de establecer el valor predeterminado. Lo haré en su lugar, gracias. Pero todavía no entiendo por qué el bloque del medio del código en la pregunta original no establece la propiedad en falso. Estoy probando contra '' para establecer la propiedad en falso. ¿Por qué no funciona eso? – scobi

+0

@Scott Bilas: ¿Está diciendo que después de ejecutar ' false', el valor sigue siendo ''''? –

+0

Sí, de acuerdo con el compilador. Es como si ese conjunto de propiedades nunca ocurriera. – scobi

3

Si desea declarar valores predeterminados para mejores propiedades el n usando eligió es hacerlo en la propiedad como:

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

También para condiciones envuelva siempre el lado izquierdo y derecho en '', incluso si se trata de lo que debería ser valores bool. Así que cambie su segundo grupo de propiedades para que se vea como:

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