4/8/2010 12:40
El Bruno
[MSBUILD] HowTo: Utilizar grupos de elementos en MSBuild (III)

Buenas,
hoy toca ver un poco somo funcionan el elemento <ItemGroup> en MSBuild. Este elemento permite definir una colección de elementos personalizados,en scripts de MSBuild, para luego poder trabajar con los mismos.
En el siguiente ejemplo, creo una colección de elementos <Cliente>, entre las líneas 6 y 11, con diferentes valores para cada uno de los mismos. Luego utilizo una tarea personalizada que concatena los valores de estos elementos (líneas 15 a 19); y los retorno en una propiedad llamada StringResult (línea 18). A continuación se muestra el valor de esta propiedad.
1: <Project DefaultTargets="Inicio"
2: xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
3: <UsingTask AssemblyFile="c:\srcBruno\Agile01\TfsBuild\bin\Debug\ElBruno.TfsBuild.dll"
4: TaskName="ElBruno.TfsBuild.StringConcatenate" />
5: <!-- Coleccion de elementos -->
6: <ItemGroup>
7: <Cliente Include="Bruno" />
8: <Cliente Include="Valentino" />
9: <Cliente Include="Martina" />
10: <Cliente Include="Pao" />
11: </ItemGroup>
12: <!-- Target Inicial -->
13: <Target Name="Inicio">
14: <!-- Concatena cadenas -->
15: <ElBruno.TfsBuild.StringConcatenate Items="@(Cliente)"
16: Separator=";"
17: AppendLine="true">
18: <Output TaskParameter="StringResult" PropertyName="StringResult" />
19: </ElBruno.TfsBuild.StringConcatenate>
20:
21: <!-- Muestra el resultado -->
22: <Message Text="$(StringResult)" />
23: </Target>
24: </Project>
El resultado de la ejecución de este proyecto es el siguiente:
Las colecciones de elementos, también pueden ser utilizadas para trabajar con cantidades “dinámicas” de elementos. El siguiente proyecto de MSBuild, define un ItemGroup en el que se agregan 2 elementos para trabajar con los archivos generados de Enterprise Library, que por lo general se almacenan en la ubicación [C:\EntLib50Src\bin]
- <Dll>, obtiene todos los archivos con extensión .dll
- <Exe>, obtiene todos los archivos con extensión .exe
Una vez definidos estos elementos, se concatena el valor de los mismos en 2 propiedades y se muestran las mismas en la consola de MSBuild.
1: <Project DefaultTargets="Inicio"
2: xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
3: <UsingTask AssemblyFile="c:\srcBruno\Agile01\TfsBuild\bin\Debug\ElBruno.TfsBuild.dll"
4: TaskName="ElBruno.TfsBuild.StringConcatenate" />
5: <!-- Coleccion de elementos -->
6: <ItemGroup>
7: <Dll Include="c:\EntLib50Src\bin\*.dll" />
8: <Exe Include="c:\EntLib50Src\bin\*.exe" />
9: </ItemGroup>
10: <!-- Target Inicial -->
11: <Target Name="Inicio">
12: <!-- Concatena cadenas -->
13: <ElBruno.TfsBuild.StringConcatenate Items="@(Dll)"
14: Separator=";"
15: AppendLine="false">
16: <Output TaskParameter="StringResult" PropertyName="StringResultDll" />
17: </ElBruno.TfsBuild.StringConcatenate>
18: <ElBruno.TfsBuild.StringConcatenate Items="@(Exe)"
19: Separator=";"
20: AppendLine="false">
21: <Output TaskParameter="StringResult" PropertyName="StringResultExe" />
22: </ElBruno.TfsBuild.StringConcatenate>
23: <!-- Muestra el resultado -->
24: <Message Text="$(StringResultDll)" />
25: <Message Text="=======================================" />
26: <Message Text="$(StringResultExe)" />
27: </Target>
28: </Project>
El resultado de ejecución del proyecto es el siguiente:
Los proyectos de ejemplo se pueden descargar desde http://cid-bef06dffdb192125.office.live.com/self.aspx/Code%20Samples/2010%2008%2004%20MsBuild%20ItemGroups.zip
Saludos @ Here
El Bruno
Archivado en: Visual Studio 2010,Build,Code Sample,MSBuild
Comparte este post: