6/9/2010 11:33
El Bruno
[MSBUILD] Tareas autocontenidas/Inline Tasks en MSBuild 4.0 (XI)

Buenas,
una de las novedades más interesantes y más peligrosas que se incorporan en MSBuild 4.0, es la capacidad de trabajar con tareas autocontenidas (Inline Tasks). El listado completo de novedades se puede encontrar aquí, pero lo mejor de esta novedad es que para tareas simples, ya no será necesario crear un ensamblado .Net que implemente la interfaz ITask, e integrar el mismo en el proceso de Build. Para definir una Inline Task, se utiliza el elemento UsingTask, y dentro del mismo, se define la implementación de la tarea.
El siguiente proyecto, muestra un ejemplo de una tarea autocontenida. Dentro del mismo:
- El proyecto especifica explícitamente que la versión es 4.0 (línea 2)
- Trabajo con un único MSBuild Target inicial donde se invoca a una tarea llamada DisplayTinos (línea 5)
- La definición de la tarea DisplayTino se realiza entre las líneas 7 y 22, utilizando UsingTask.
- En la línea 8 se define el nombre de la tarea
- La definición de la tarea, incluyendo el lenguaje, los usings, y el código de la misma; se realiza entre las líneas 12 y 21
1: <Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003"
2: ToolsVersion="4.0"
3: InitialTargets="Target1">
4: <Target Name="Target1">
5: <DisplayTinos />
6: </Target>
7: <UsingTask
8: TaskName="DisplayTinos"
9: TaskFactory="CodeTaskFactory"
10: AssemblyFile="$(MSBuildToolsPath)\Microsoft.Build.Tasks.v4.0.dll" >
11: <ParameterGroup />
12: <Task>
13: <Using Namespace="System"/>
14: <Using Namespace="System.IO"/>
15: <Code Type="Fragment" Language="cs">
16: <![CDATA[
17: Log.LogMessage("Hola Valentino!");
18: Log.LogMessage("Hola Martina!");
19: ]]>
20: </Code>
21: </Task>
22: </UsingTask>
23: </Project>
El resultado de ejecución del proyecto es el siguiente, donde es posible ver los logs con los nombres de los Tinos en la consola.
Para demostrar la flexibilidad que nos brinda el trabajo con Tareas autocontenidos, podemos modificar el código para que en lugar de mostrar dos mensajes con los nombres del Valentino y la Martina, nos muestre un Warning y un Error (líneas 17 y 18):
1: <Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003"
2: ToolsVersion="4.0"
3: InitialTargets="Target1">
4: <Target Name="Target1">
5: <DisplayTinos />
6: </Target>
7: <UsingTask
8: TaskName="DisplayTinos"
9: TaskFactory="CodeTaskFactory"
10: AssemblyFile="$(MSBuildToolsPath)\Microsoft.Build.Tasks.v4.0.dll" >
11: <ParameterGroup />
12: <Task>
13: <Using Namespace="System"/>
14: <Using Namespace="System.IO"/>
15: <Code Type="Fragment" Language="cs">
16: <![CDATA[
17: Log.LogWarning("Hola Valentino!");
18: Log.LogError("Hola Martina!");
19: ]]>
20: </Code>
21: </Task>
22: </UsingTask>
23: </Project>
El resultado de la compilación del proyecto con la muestra del Warning y el Error es el siguiente, donde además es posible información adicional, como por ejemplo el número de línea donde se lanza el Warning o el Error.
Saludos @ Here
El Bruno (@elbruno en Twitter)
Archivado en: Visual Studio 2010,Build,Code Sample,Tutorial,MSBuild
Comparte este post: