1/9/2010 12:51
El Bruno
[MSBUILD] Condiciones en MSBuild (VIII)

Buenas,
las condiciones en MSBuild se aplican a casi todos los elementos y tareas que están disponibles para utilizar a través del atributo @Condition. En esta entrada de MSDN: MSBuild Conditions, se explican todos los tipos de condiciones soportados, pero viene bien mostrar un par de ejemplos.
El siguiente proyecto, define una propiedad $(Nino) (línea 4) y luego ejecuta una tarea para mostrar un mensaje, dependiendo de una condición donde se evalua si el valor de la propiedad es igual a [Valentino] (línea 8):
1: <Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003" >
2: <!-- Grupo de Propriedades -->
3: <PropertyGroup>
4: <Nino>Valentino</Nino>
5: </PropertyGroup>
6: <Target Name="Target1">
7: <Message Text="'$ (Nino)'=='Valentino'"
8: Condition="'$(Nino)'=='Valentino'" />
9: </Target>
10: </Project>
El resultado del proyecto es el siguiente:
Si en cambio definimos una condición que no se cumpla
1: <Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003" >
2: <!-- Grupo de Propriedades -->
3: <PropertyGroup>
4: <Nino>Valentino</Nino>
5: </PropertyGroup>
6: <Target Name="Target1">
7: <Message Text="'$ (Nino)'=='Bruno'"
8: Condition="'$(Nino)'=='Bruno'" />
9: </Target>
10: </Project>
En el resultado no veremos el mensaje.
Otra opción es trabajar con condiciones complejas, ya que podemos utilizar los operadores clásicos AND y OR para estas situaciones:
1: <Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003" >
2: <!-- Grupo de Propriedades -->
3: <PropertyGroup>
4: <Nino>Valentino</Nino>
5: <Nina>Martina</Nina>
6: </PropertyGroup>
7: <Target Name="Target1">
8: <Message Text="Condicion Simple"
9: Condition="'$(Nino)'=='Valentino'" />
10: <Message Text="Condicion Simple Inválida"
11: Condition="'$(Nino)'!='Valentino'" />
12: <Message Text="Condicion Compuesta"
13: Condition="'$(Nino)'=='Valentino' AND '$(Nina)'!='Valentino'" />
14: </Target>
15: </Project>
En donde podremos ver que se muestran solo el primer y tercer mensaje:
Y si en lugar de tareas de mensajes, aplicamos condiciones a llamadas a Targets, con la tarea CallTarget
1: <Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003" >
2: <!-- Grupo de Propriedades -->
3: <PropertyGroup>
4: <Nino>Valentino</Nino>
5: <Nina>Martina</Nina>
6: </PropertyGroup>
7: <Target Name="Target1">
8: <CallTarget Targets="Target2"
9: Condition="'$(Nino)'=='Valentino'" />
10: <CallTarget Targets="Target3"
11: Condition="'$(Nino)'!='Valentino'" />
12: <CallTarget Targets="Target4"
13: Condition="'$(Nino)'=='Valentino' AND '$(Nina)'!='Valentino'" />
14: </Target>
15: <Target Name="Target2">
16: <Message Text="Target 2" />
17: </Target>
18: <Target Name="Target3">
19: <Message Text="Target 3" />
20: </Target>
21: <Target Name="Target4">
22: <Message Text="Target 4" />
23: </Target>
24: </Project>
pues el resultado es el mismo:
Saludos @ Here
El Bruno (@elbruno en Twitter)
Archivado en: Visual Studio 2010,Build,Code Sample,Tutorial,MSBuild
Comparte este post: