La Bloguera 16 July 2010
- [MSBUILD] HowTo: Utilizar propiedades del tipo ITaskItem en un en una tarea personalizada para TFSBuild
Buenas,
muchas veces cuando se publican ejemplos de tareas personalizadas para TFS2008, vemos como en las mismas se implementan propiedades “simples” para pasar información a la tarea o para que la misma retorne algo. Cuando tenemos que trabajar con listas (o vectores) de información, es necesario implementar una propiedad del tipo ITaskItem. Estas propiedades son bastante comunes en MSBuild, aunque trabajar con ellas es un poco delicado.
Por ejemplo, el siguiente script de MSBuild, se ejecutará en un servidor TFSBuild 2008. En el mismo, en el Target inicial de trabajo que poseemos [BeforeEndToEndIteration], se invoca a un target personalizado [TestStringConcatenate]. En este target, creamos un ItemGroup, con varios elementos dentro del mismo (líneas 10 a 15), y luego invocamos una tarea personalizada que concatena el valor de las cadenas de los elementos del ItemGroup y retorna un único string que se almacena en una propiedad llamada [StringResult] (línea 20). Finalmente, se muestra el resultado de esta propiedad en el log del build (líneas 23 a 25).
1: <Target Name="BeforeEndToEndIteration">
2: <CallTarget Targets="TestStringConcatenate" />
3: <Error Text="Stop build"></Error>
4: </Target>
5: <Target Name="TestStringConcatenate" >
6: <BuildStep TeamFoundationServerUrl="$(TeamFoundationServerUrl)"
7: BuildUri="$(BuildUri)" Status="Succeeded"
8: Message="INICIO [TestStringConcatenate]. Prueba de StringConcatenate" />
9: <!-- Crea un ITEMGROUP de ejemplo -->
10: <ItemGroup>
11: <TestSC Include="Bruno" />
12: <TestSC Include="Valentino" />
13: <TestSC Include="Martina" />
14: <TestSC Include="Gatito .Net" />
15: </ItemGroup>
16:17: <!—Concatena cadenas -->
18: <ElBruno.StringConcatenate Items="@(TestSC)"
19: Separator=”;” AppendLine="true">
20: <Output TaskParameter="StringResult" PropertyName="StringResult" />
21: </FREMAP.Arq.TfsBuild.StringConcatenate>
22:23: <BuildStep TeamFoundationServerUrl="$(TeamFoundationServerUrl)"
24: BuildUri="$(BuildUri)" Status="Succeeded"
25: Message="-Resultado String Concatenate: [$(StringResult)]" />
26:27: <BuildStep TeamFoundationServerUrl="$(TeamFoundationServerUrl)"
28: BuildUri="$(BuildUri)" Status="Succeeded"
29: Message="-- FIN." />
30: </Target>
La tarea personalizada [ElBruno.StringConcatenate], recibe la lista de elementos en una propiedad llamada [Items], y además otra propiedad “simple” de tipo Bool llamada [AppendLine] y otra propiedad “simple” de tipo string llamada [Separator], para definir si se agrega un salto de linea entre cada elemento.
El código de la tarea personalizada es el siguiente (quejas al margen, que ha sido picado en segundos !!! ^^)
1: using Microsoft.Build.Utilities;
2: using Microsoft.Build.Framework;
3: using System.Collections.Generic;
4: using System.Text;
5: namespace ElBruno.TfsBuild
6: {7: public class StringConcatenate : Task
8: {9: #region TFS Task Properties
10: /// <summary>
11: /// Gets or sets the separator.
12: /// </summary>
13: /// <value>The separator.</value>
14: public string Separator { get; set; }
15: /// <summary>
16: /// Gets or sets a value indicating whether [append line].
17: /// </summary>
18: /// <value><c>true</c> if [append line]; otherwise, <c>false</c>.</value>
19: public bool AppendLine { get; set; }
20: /// <summary>
21: /// Gets or sets the items.
22: /// </summary>
23: /// <value>The items.</value>
24: public ITaskItem[] Items { get; set; }
25: /// <summary>
26: /// Gets or sets the string result.
27: /// </summary>
28: /// <value>The string result.</value>
29: [Output]30: public string StringResult { get; set; }
31: #endregion
32:33: #region TFS Override members
34: /// <summary>
35: /// Executes this instance.
36: /// </summary>
37: /// <returns></returns>
38: public override bool Execute()
39: {40: bool ret = true;
41: var sb = new StringBuilder();
42: if (Items != null)
43: {44: for (int i = 0; i < Items.Length; i++)
45: {46: sb.Append(Items
.ItemSpec);47: if (i < Items.Length - 1)
48: {49: sb.Append(Separator);50: if (AppendLine)
51: sb.AppendLine();52: }53: }54: }55: StringResult = sb.ToString();56: return ret;
57: }58: #endregion
59: }60: }Cuando ejecutamos la tarea en un servidor TFS2008, podremos ver como la misma muestra los resultados esperados, con los strings concatenados utilizando un salto de línea y un punto y coma.
Apuntado … en la época de TFS2010, para proyectos de TFS2008
Saludos @ Here
Crossposting from El Bruno
- [VS2010] Visual Studio 2010 Quick Reference Guidance en español (es-??)
Buenas,
seguramente ya conoces las Quick Reference Guides que cada tanto libera el equipo de Visual Studio Rangers. Pues bien, el amigo Francisco Fagas (MVP y crack de los grandes) ha tenido el detalle de participar en este proyecto traduciendo al español parte de este contenido. Inicialmente
es decir primero lo primeroha comenzado por la Visual Studio 2010 Quick Reference Guide, que es algo así como la Guía de Referencia Rápida de Visual Studio 2010 y es un doc que vale la pena revisar.El mismo se puede descargar desde http://vs2010quickref.codeplex.com/releases/view/37144, haciendo click en [All Downloads] y aparecerá el link a [Spanish – Quick Reference Guide].
A ver cuando empiezan a salir los otros !!! ^^
Saludos @ Here
Descarga: http://vs2010quickref.codeplex.com/releases/view/37144
Crossposting from El Bruno
Digest powered by RSS Digest

