7/9/2010 7:40
El Bruno
[MSBUILD] Definiendo propiedades en Tareas autocontenidas/Inline Tasks (XII)

Buenas,
en mi post anterior comentaba sobre las nuevas Inline Tasks introducidas en MSBuild 4.0. Además de poder crear y definir este tipo de tareas, es posible también definir propiedades de Input y Output para utilizarlos en la definición de la tarea. Las mismas se definen dentro del elemento <ParameterGroup /> y pueden definir características propias como por ejemplo, el tipo de dato de la propiedad, si es requerida, o si es de tipo Output.
El siguiente proyecto define un parámetro de tipo Boolean en la línea 12, y de acuerdo al valor del mismo, se muestra un Warning o un Error en la consola de Output. Cuando se invoca a la tarea (línea 5), se le pasa el valor correspondiente:
1: <Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003"
2: ToolsVersion="4.0"
3: InitialTargets="Target1">
4: <Target Name="Target1">
5: <ParamSample DisplayWarning="false" />
6: </Target>
7: <UsingTask
8: TaskName="ParamSample"
9: TaskFactory="CodeTaskFactory"
10: AssemblyFile="$(MSBuildToolsPath)\Microsoft.Build.Tasks.v4.0.dll" >
11: <ParameterGroup>
12: <DisplayWarning ParameterType="System.Boolean" Required="true" />
13: </ParameterGroup>
14: <Task>
15: <Using Namespace="System"/>
16: <Code Type="Fragment" Language="cs">
17: <![CDATA[
18: if(DisplayWarning)
19: {Log.LogWarning("Hola Valentino!");}
20: else
21: {Log.LogError("Hola Martina!");}
22: ]]>
23: </Code>
24: </Task>
25: </UsingTask>
26: </Project>
Este es el resultado con el parámetro en FALSE:
Y este es el resultado con el parámetro en TRUE:
Como además la propiedad es requerida, si no se le pasa un valor a la misma, pues tendremos un error similar al siguiente:
El siguiente proyecto es similar, pero en el mismo se define una propiedad del tipo Int32 y con el valor de la misma se recorre un bucle FOR, y se muestra un mensaje muy pobre:
1: <Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003"
2: ToolsVersion="4.0"
3: InitialTargets="Target1">
4: <Target Name="Target1">
5: <ParamSample Iteration="55"/>
6: </Target>
7: <UsingTask
8: TaskName="ParamSample"
9: TaskFactory="CodeTaskFactory"
10: AssemblyFile="$(MSBuildToolsPath)\Microsoft.Build.Tasks.v4.0.dll" >
11: <ParameterGroup>
12: <Iteration ParameterType="System.Int32" />
13: </ParameterGroup>
14: <Task>
15: <Using Namespace="System"/>
16: <Code Type="Fragment" Language="cs">
17: <![CDATA[
18: for(int i = 0; i < Iteration; i++)
19: Log.LogMessage("i: " + i.ToString());
20: ]]>
21: </Code>
22: </Task>
23: </UsingTask>
24: </Project>
El resultado es el siguiente:
Saludos @ Home
El Bruno (@elbruno en Twitter)
Archivado en: Visual Studio 2010,Build,Code Sample,MSBuild
Comparte este post: