28/9/2010 18:11
El Bruno
[MSBUILD] Creando tareas personalizadas (XVI)

Buenas,
hace un tiempo escribí un post donde comenté como crear una tarea personalizada para MSBuild que agrupe un set de strings. Pues este post es un primer paso para mostrar como crear una tarea personalizada para MSBuild, y luego iremos complicando un poquito el tema.
En primer lugar debermos crear un proyecto del tipo Class Library, y agregar las siguientes referencias:
- Microsoft.Build.Framework
- Microsoft.Build.Tasks.v3.5
- Microsoft.Build.Utilities.v3.5
Luego, crearemos una clase llamada [MyFirstTask] que hereda de Task, de esta manera aprovecharemos la funcionalidad ya implementada en esta tarea de MSBuild (esta tarea está incorporada en Microsoft.Build.Utilities.dll). En este ejemplo, crearemos 2 propiedades llamadas InputData y OutputData para poder intercambiar datos con la tarea. El siguiente código muestra un ejemplo:
1: using Microsoft.Build.Utilities;
2: using Microsoft.Build.Framework;
3: namespace ElBruno.MsBuild
4: {
5: public class MyFirstTask : Task
6: {
7: public string InputData { get; set; }
8: [Output]
9: public string OutputData { get; set; }
10: public override bool Execute()
11: {
12: bool ret = true;
13: OutputData = string.Format(@"{0} Input Data Procesada", InputData);
14: return ret;
15: }
16: }
17: }
Una vez compilado el proyecto, ya podemos crear un proyecto de MSBuild, donde probar la tarea. El siguiente ejemplo, muestra como importar y definir la tarea a partir de un path específico (líneas 4 y 5), y luego como invocar a la misma utilizando las propiedades de Input y output (líneas 8 y 9). Finalmente se muestra en un mensaje el dato que retorna la ejecución de la tarea (línea 11).
1: <Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003"
2: InitialTargets="Target1">
3: <!-- Tareas personalizada -->
4: <UsingTask TaskName="ElBruno.MsBuild.MyFirstTask"
5: AssemblyFile="c:\srcBruno\Agile01\MsBuild Tests\Sample 01\bin\Debug\ElBruno.MsBuild.dll" />
6: <!-- Utilizacion de la tarea en un Target -->
7: <Target Name="Target1">
8: <MyFirstTask InputData="Valentino">
9: <Output TaskParameter="OutputData" PropertyName="OutputData" />
10: </MyFirstTask>
11: <Message Text="El resultado es: $(OutputData)" />
12: </Target>
13: </Project>
El resultado de ejecución de la tarea es el siguiente
En los próximos posts, un poco de material más profundo :D
Saludos @ Home
El Bruno

DISCLAIMER: No agrego mucho detalle sobre la creación del proyecto, ni explicaciones de funcionamiento, porque creo que viendo los 2 ejemplos de código; más el screenshot del resultadao mucha gente ya podrá darse una idea de como funciona. En caso contrario –> MSDN y curso de pago :D
Archivado en: Visual Studio 2010,HowTo,Code Sample,Tutorial,MSBuild
Comparte este post: