3/9/2010 11:39
El Bruno
[MSBUILD] Como obtener Metadata en elementos de ItemGroup (X)

Buenas,
en un par de post anteriores a este, escribí sobre la forma de trabajar con grupos de elementos en MSBuild. Cuando los grupos de elementos con los que trabajamos son grupos archivos, podemos acceder a información adicional que nos permite ver datos como la extensión de los archivos, la fecha de modificación, etc. El detalle completo de la metadata disponible se puede consultar aquí.
El siguiente proyecto de ejemplo, define un ItemGroup con una colección de elementos llamados <EntLib50Src> en la que se incluyen todos los archivos con extensión .bat que se almacenan en el directorio de Sources de Enterprise Library 5.0. Luego, en el MSBuild Target principal del proyecto, se muestra información adicional para los items, como por ejemplo el path de cada uno, el directorio raíz, el nombre de los archivos, etc.
1: <Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003"
2: InitialsTargets="Target1">
3: <ItemGroup>
4: <EntLib50Src Include="c:\EntLib50Src\**\*.bat" />
5: </ItemGroup>
6: <Target Name="Target1">
7: <Message Text="Fullpath: %(EntLib50Src.FullPath)"/>
8: <Message Text="RootDir: %(EntLib50Src.RootDir)"/>
9: <Message Text="FileName: %(EntLib50Src.FileName)"/>
10: <Message Text="RelativeDir: %(EntLib50Src.RelativeDir)"/>
11: </Target>
12: </Project>
El resultado de la ejecución del proyecto es el siguiente, donde se puede ver como sólo se trabaja con los 8 archivos .bat que se distribuyen con el código fuente de EntLib.
Si cambiamos el proyecto para trabajar con clases de C#, archivos con extensión .cs:
1: <Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003"
2: InitialsTargets="Target1">
3: <ItemGroup>
4: <EntLib50Src Include="c:\EntLib50Src\**\*.cs" />
5: </ItemGroup>
6: <Target Name="Target1">
7: <Message Text="Fullpath: %(EntLib50Src.FullPath)"/>
8: <Message Text="RootDir: %(EntLib50Src.RootDir)"/>
9: <Message Text="FileName: %(EntLib50Src.FileName)"/>
10: <Message Text="RelativeDir: %(EntLib50Src.RelativeDir)"/>
11: </Target>
12: </Project>
Podemos ver que el tiempo de ejecución del proyecto ha subido de menos de 1 segundo, a casi 7 segundos y que la información es mucho más completa.
Saludos @ Here
El Bruno (@elbruno en Twitter)
Archivado en: Visual Studio 2010,Code Sample,MSBuild
Comparte este post: