4/11/2010 18:39 El Bruno

[MSBUILD] Aplicando principios de diseño en nuestros archivos MSBuild, que nos llevarán a trabajar en la línea de comandos (Back to the Past)

image47dd1de4

Buenas,

cuando los archivos de MSBuild comienzan a ser más grandes que lo que aconseja el sentido común, pues es una buena idea, separar los mismos en varios archivos y además separar los MSBuild Targets en Targets más pequeños. Vamos que los mismos principios SOLID que aplicamos cuando escribimos código, deberíamos intentar aplicar en el diseño y construcción de nuestros archivos de MSBuild (ojo, que no soy un inconsiente y sé que MSBuild es poco más que un lenguaje, pero por pedir que no falte). Pero bueno, cuando empezamos a separar y a aislar los targets, también nos encontramos en la situación de querer probar el funcionamiento de los mismos de manera aislada y esto puede complicarse, principalmente por la naturaleza de MSBuild, donde es muy común que para invicar a un Target necesites una serie de propiedades o Items con valores ya establecidos.

Supongamos que tenemos el siguiente proyecto MSBuild.

   1: <Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003" 
   2:          ToolsVersion="4.0">
   3:   <Target Name="Target1">
   4:     <Message Text="Mensaje 1: $(Nino)"/>
   5:   </Target>
   6:   <Target Name="Target2">
   7:     <Message Text="Mensaje 2: $(Nino)"
   8:              Condition="'$(Nina)'=='Martina'"/>
   9:   </Target>
  10: </Project>

 

Si ejecutamos el mismo desde la línea de comandos veremos un resultado similar al siguiente, donde el primer target se ejecuta, pero en ningún momento estamos definiendo la propiedad $(Nino) para mostrar el valor de la misma.

image

 

Para asignar un valor a esta propiedad, sin tener que modificar el proyecto, simplemente utilizamos la opción /propertyName en la llamada, por ejemplo:

C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC>msbuild "C:\srcBruno\Agile01\MsBuild Tests\CmdInvokeProperties_01.targets" /property:Nino=Valentino

Si ejecutamos el comando veremos como la tarea que muestra el mensaje, muestra el valor de la propiedad

image

 

Si ahora queremos probar el Target2, y además agregar otra propiedad para que la condición (línea 8) sea válida, pues también utilizamos la opción /target, por ejemplo:

C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC>msbuild "C:\srcBruno\Agile01\MsBuild Tests\CmdInvokeProperties_01.targets" /target:Target2 /property:Nino=Valentino;Nina=Martina

El resultado de la ejecución ejecuta el segundo Target y además interpreta como válida la condicion.

image

 

Este HACK es mu simple, pero puede sacarnos de más de un problema al momento de trabajar e intentar probar nuestros MSBuild Targets.

La referencia completa de la línea de comandos se puede consultar aquí.

Saludos @ Here

El Bruno

   

Archivado en: ,,,
Comparte este post:

# [#MSBUILD] Recopilatorio de enlaces para comenzar a conocer MSBuild (III)

Tuesday, September 27, 2011 9:10 PM by El Bruno

Buenas, actualización de la lista de enlaces para dar los primeros pasos con MSBuild . Cómo

# [#MSBUILD] Recopilatorio de enlaces para comenzar a conocer MSBuild (III)

Wednesday, September 28, 2011 8:34 PM by El Bruno

Buenas, actualización de la lista de enlaces para dar los primeros pasos con MSBuild . Cómo