April 2011 - Artículos

image47dd1de4

Buenas,

antes de comenzar a explicar una forma sencilla de modificar la definición un WorkItem Type, llega el disclaimer:

Siempre es recomendable pensarlo 20 veces antes de modificar la guía de procesos o plantilla de un Team Project, en otras palabras: no lo modifiques porque en el 95% de los casos, las plantillas por defecto son suficientes.

Ahora que ya hemos sentado las bases, vamos a un escenario concreto:

Necesidad de agregar un combo a un workitem, por ejemplo  un Bug, y que los valores del mismo sean fáciles de editar y mantener.

Para esto, aprovecharemos las Team Foundation Server Power Tools, y modificaremos la definición de un Bug para dar solución al escenario anterior.

Tutorial

1. Desde Visual Studio 2010, acceder al menú [Tools // Process Editor // Global List // Open Global List from Server]. Si no estábamos conectados a un TP, pues en este momento tendremos que conectarnos.

2. En el formulario de edición, desplegar el menú contextual y seleccionar la opción [New Global List]

image

 

3. Utilizando las opciones del editor, en este caso he creado una lista nueva llamada [ExtendedBoolean] con los siguientes valores:

image

 

4. Una vez terminada de editar la lista, presionar [OK]. Esta acción guarda los cambios en la definición global de elementos del servidor de TFS2010.

5. Ahora toca editar la definición de un Bug, para esto seleccionamos la opción [Tools // Process Editor // Work Item Types // Open WIT from Server].

6. Seleccionamos el Team Project correspondiente y luego el tipo de WorkItem que queremos modificar.

image

 

7. En el formulario de edición del WorkItem Type, en la pestaña [Fields] creamos un nuevo campo llamado [ExtendedBoolean], de tipo String, con los siguientes valores.

image

 

8. Seleccionamos la pestaña [Rules] y agregamos una nueva regla del tipo [ALLOWEDVALUES]

image

 

9. Esto abrirá el formulario de edición de los valores que soportará el WorkItem Field. En este caso, presionamos [New] y seleccionamos la lista global que hemos creado en los pasos anteriores.

image

 

10. Agregamos el nuevo campo, a la interfaz visual de edición del WorkItem (lo he explicado en detalle en este post) y ya podremos ver el combo con los valores de la lista global.

image

 

11. Si necesitamos modificar estos valores, en lugar de modificar la definición del WorkItem, simplemente modificamos la lista global.

 

Saludos @ Home

El Bruno

   

image47dd1de4

Buenas,

cuando trabajas con cualquier estrategia de Branching (sino lo haces, fuera de mi blog !!! deberías) es muy usual que te encuentres abriendo la misma solución en la rama de desarrollo evolutovo y en la rama de mantenimiento o correctivo.

El siguiente ejemplo, muestra como tenemos la solución ClassLibrary1 y los archivos propios de la misma en las ramas [DEV] y [MAIN]

image

El problema suele venir cuando abres una solución, por ejemplo de la rama DEV y te despistas y te pones a modificar la misma como si fuese la de la rama MAIN.

Una forma útil de diferenciar los elementos de cada rama, es aprovechar una nueva feature de la VSCommands 2010 para Visual Studio 2010 que permite definir un “friendly name” para las soluciones. Para trabajar con esta feature, seleccionamos la solucion y vemos las propiedades de la misma, donde veremos 2 nuevas propiedades.

image

En la propiedad [Friendly Name Solution Path Reg] definimos una expresión regular en la que podemos crear uno o más grupos que luego podemos utilizar en la propiedad [Friendly Name] para hacer uso de los mismos. En este caso, el grupo se llama {BranchName} y lo muestro después del nombre de la solución.

Si abrimos la solución desde la rama DEV veremos que esta descripción se aplica al título de la ventana y también en el Solution Explorer.

image

Si en cambio abrimos la solución desde la rama MAIN, veremos la descripcion correspondiente a esta rama.

image

Para más información sobre las VSCommands 2010: http://vscommands.com/features/

Saludos @ Here

El Bruno

   

image47dd1de4

Buenas,

StyleCop es una herramienta que analiza código fuente C# y aplica un conjunto de reglas de estilo y consistencia. Se puede ejecutar desde dentro de Visual Studio o integrado en un proyecto de TeamBuild. Es bastante útil cuando además de contar con un buen diseño de la arquitectura de tu solución, de respetar las reglas de diseño SOLID, quieres garantizar que la “estética de tu código” sea coherente entre sí. Este post se basa en la versión 4.5RC que se puede descargar desde aquí.

Un detalle a tener en cuenta es que durante la instalación del producto, puedes seleccionar la integración con Visual Studio 2010 y además si quieres los archivos necesarios para MSBuild para agregar validaciones de StyleCop durante compilaciones de Team Build.

image

Para este ejemplo, he seleccionado las 2 opciones.

Vamos por el primer ejemplo de código para que veamos lo que dice StyleCop al respecto. Si creamos un proyecto de bibloteca de clases con su clase por defecto nos encontramos con el siguiente código:

   1: using System;
   2: using System.Collections.Generic;
   3: using System.Linq;
   4: using System.Text;
   5:  
   6: namespace StyleCopDemo01
   7: {
   8:     public class Class1
   9:     {
  10:     }
  11: }

 

Y StyleCop nos avisa con 6 Warnings de los siguientes detalles a tener en cuenta:

image

Si “movemos” los using dentro del Namespace, como indican los últimos warnings, el código queda de la siguiente forma:

   1: namespace StyleCopDemo01
   2: {
   3:     using System;
   4:     using System.Collections.Generic;
   5:     using System.Linq;
   6:     using System.Text;
   7:  
   8:     public class Class1
   9:     {
  10:     }
  11: }

Y efectivamente, ahora solo tenemos 2 warnings por los que preocuparnos:

image

Agregamos un poco de código más al ejemplo:

   1: public string Foo(int firstArgument, int secondArgument)
   2: {
   3:     var res = "no";
   4:     if (firstArgument == secondArgument)
   5:     {
   6:         res = "yes";
   7:     }
   8:     if (firstArgument > secondArgument)
   9:     {res = "maybe";}
  10:     return res;
  11: }

 

Y ahora veremos como tenemos que preocuparnos por los espaciós después de las llaves, los espacios entre los elementos entre las llaves, etc.

image

 

Por defecto, StyleCop tiene activadas todas las reglas que posee, lo cual puede ser bastante molesto; en especial en lo referido a los comentarios, ya que no solo recomienda agregar tags de comentarios en todas las clases, sino que también recomienda headers en las clases, secciones de copyright, etc.

Si queremos configurar el set de reglas con el que queremos trabajar, podemos hacerlo desde el proyecto en cuestión. Seleccionamos el mismo, desplegamos el menú contextual y seleccionamos la opción [StyleCop Settings]

image

 

En este formulario veremos los diferentes tipos de reglas que se aplican durante el análisis de StyleCop. Mi recomendación > desactivar las de documentación Open-mouthed smile

image

 

En los próximos posts un poco más sobre StyleCop y Team Build.

 

Saludos @ Here

El Bruno

   

image47dd1de4

Buenas,

hoy me toca recomendar una excelente herramienta de nuestros amigos de ScrumForTeamSystem: TFS WorkBench.

Esta herramienta permite trabajar con elementos de un Team Project de Team Foundation Server 2010 y visualizar los mismos como si se tratara de un tablero de trabajo de PostIs.

Con TFS WorkBench es posible

  • Arrastrar y soltar elementos de trabajo en las diferentes líneas de estado de los mismos
  • Visualizar y manipular los enlaces para los WorkItems a través en la vista jerárquica.
  • Crear y editar varios WorkItems simultáneamente utilizando el modo de lista de elemento.

image

Realmente recomendable.

Descarga: http://www.scrumforteamsystem.com/version-3/tfs-workbench-v2-2-x64

Saludos @ Home

El Bruno

   

image47dd1de4

Buenas,

para todos aquellos que siempre han deseado participar en el fabuloso mundo de la piratería informática, ya pueden comenzar a comprar libros en PDF desde CampusMVP. No me voy a meter en el tinglado de la piratería, cada uno es mayoricto y sabrá que hacer al respecto. Yo, un año después de lanzar el librako, ya me he comprado una Ferrari, así que me doy por satisfecho con las ganancias, todo lo que entre ahora es para ponerle el equipo a Gas a la Ferrari.

Pero bueno, si estás muy lejos, te sobran unos €uros y todavía queres mi libro de Visual Studio 2010 en español, desde http://shop.campusmvp.com/Product-Visual-Studio-2010,-.NET-4.0-y-ALM_89.aspx podes tener acceso a uno Open-mouthed smile

 

Saludos @ Home

El Bruno

   

image47dd1de4

Buenas,

si bien el último screenshot es el único que afecta a Team Foundation Server 2010, este post demuestra como instalar el servicio de SMTP que viene con Windows Server 2008 y configurar el mismo para que reenvie los correos al servicio de SMTP de GMAIL. De esta forma podemos tener algo tan útil como son las notificaciones por correo en nuestras máquinas virtuales de demo de Team Foundation Server 2010. Para que esto funcione tienes que tener habilitada la opción de SMTP y POP3 en tu cuenta de GMAIL.

Tutorial

1. En primer lugar debemos activar la Feature para tener acceso a un servicio de SMTP. Accedemos al [Server Manager] y en el mismo en la sección de Features agregamos [SMTP Server].

image

2. Una vez finalizada la instalación podremos ver la opción de SMTP en la consola de administración de Internet Information Server. En el mismo accedemos a la configuración de SMTP Email.

image

3. En esta sección dejamos los valores por defecto, aunque si lo deseamos podemos utilizar la opción [Store e-mail in pickpu directory] para almacenar los correos en un directorio y poder ver los mismos desde allí (esto es muy útil para demos sin conexion a internet)

image

4. A continuación configuramos el servidor SMTP utilizando la interfaz de configuración de IIS 6 (ya lo sé es un poco triste, pero es lo que hay). Accedemos a la misma con el menú [Administrative Tools // Internet Information Services (IIS) 6.0 Manager]

image

5. Lo primero que vemos es que el servicio está detenido, lo seleccionamos, desplegamos el menú contextual y [Start]

image

6. Una vez iniciado, seleccionamos el mismo y accedemos a las propiedades del servicio.

image

7. En la pestaña [Access] habilitamos el servidor local para que pueda hacer Relay sobre si mismo (esto no sé si es necesario, pero de otra forma no me funcionaba)

image

8. En la pestaña [Delivery] seleccionamos [Outbound Security] y configuramos nuestra cuenta de GMAIL con la opción [Basic Authentication]. Además marcamos la opción de [TLS encryption]

image

9. En [Outbound connections] utilizamos el puerto de gmail > 587

image

10. Y finalmente en la sección [Advanced] configuramos el smart host para que utilice smtp.gmail.com.

image

11. Esto ya nos deja el servidor SMTP configurado para ser utilizado por TFS.

12. Finalmente queda la configuración de TFS2010, dentro de la consola en el nodo [Application Tier] de nuestro servidor, configuramos las alertas para que utilicen el servidor local con la cuenta de correo que deseamos utilizar.

image

 

Done !!! ahora a abrir nuestro cliente de correos favoritos y a ver como crece el Inbox con las alertas de TFS !!! Open-mouthed smile

image

 

Saludos @ Home

El Bruno

   

Fuentes: http://www.itechtalk.com/thread2250.html, http://fmuntean.wordpress.com/2008/10/26/how-to-configure-iis-smtp-server-to-forward-emails-using-a-gmail-account/

image47dd1de4

Buenas,

sé que esto es un sacrilegio > El Bruno hablando de SharePoint !!! pero es que esta extensión para Visual Studio 2010 es realmente muy útil, ya que permite el desarrollo de compilaciones cerradas (no sé como traducir sandboxes solutions) y además una plantilla para la creación de Visual WebParts. Para los no entendidos, este tipo de compilación nos trae problemas cuando trabajamos con ciertos tipos de Sharepoint en un “Sandboxed Project”. (que mundo más raro el de los amigotes del upload/download)

La misma se puede descargar desde http://visualstudiogallery.msdn.microsoft.com/8e602a8c-6714-4549-9e95-f3700344b0d9/ y me quedo con el mini post como reconr

 

Saludos @ Home

El Bruno

   

image47dd1de4

Buenas,

después del Service Pack 1 para Visual Studio 2010 el 18 de Abril se ha lanzado el Net Framework 4 Platform Update 1, y seguramente alguno se preguntará qué es este update? Personalmente entre service packs, hot fixs, patches, etc. yo me pierdo y ahora para casos especiales surge un nuevo tipo de distribucíón: “Platform Update”.

Este tipo de distribución es nueva ya que no ataca la solución de errores como en versiones anteriores, pero sí la distribución de nuevas características para una versión específica del framework que no pretende ser una nueva major o minor versión. El detalle específico de las nuevas características están detalladas en este post http://blogs.msdn.com/b/endpoint/archive/2011/04/18/microsoft-net-framework-4-platform-update-1.aspx, pero como puedes ver se centran específicamente en nuevas capacidades orientadas a AZURE (@Gis o @Ibon seguron que tienen algo más que decir al respecto), y por fín la inclusión de una state machine decente.

Desde el punto de vista de la herramienta yo solo comento lo siguiente: una vez instalada la extensión (se puede descargar desde aquí), dentro de Visual Studio 2010 podremos ver que en la creación de nuevos proyectos tenemos disponible una versión diferente del framework para trabajar que si bien no es una major o minor release, es lo suficientemente grande como para ser diferente:

Lo mismo en las propiedades de un proyecto:

¿Por qué comento esto? En mi libro (que si no compraste deberías che!!!) explico como se ha configurado el .Net Framework 4 y además Visual Studio 2010 para poder trabajar con un esquema de MultiTargeting real. Recordemos que en Visual Studio 2008 podíamos trabajar con proyectos de .Net 2, .Net 3 y .Net 3.5; pero que en realidad no eran diferentes frameworks ya que 3 y 3.5 son extensiones montadas sobre .Net 2.

Visual Studio 2010 y .Net Framework 4 son Major Releases que además tienen en cuenta la capacidad de trabajar con MultiTargeting de una forma real. Este Platform Update se integra de forma natural en Visual Studio 2010 y creo que será el primero de varias releases intermedias antes de .Net 5, en el que veremos cambios “muy pero muy grandes !!!

 

Saludos @ Home

El Bruno

   

Descarga: http://www.microsoft.com/downloads/en/confirmation.aspx?FamilyID=4863f88f-5519-4b66-a195-752746b4389a&displaylang=en

image47dd1de4

Buenas,

si sos de ese tipo de persona que no puede vivir sin tener sincronizado tu servidor de Team Foundation Server 2010 y tu otro server con Project Server 2010, pero no te animas a montar todo esto en producción; ahora podes aprovechar las máquinas virtuales con todo organizado para conocer este fabuloso mundo.El detalle de instalación y otras yerbas lo podes encontrar en : http://blogs.msdn.com/b/briankel/archive/2011/04/15/getting-started-with-the-team-foundation-server-2010-and-project-server-2010-integration-virtual-machine.aspx, aunque para más datos mejor darse una vuelta por el blog oficial de Project: http://blogs.msdn.com/b/project/

Saludos @ Home

El Bruno

   

Fuente: http://blogs.msdn.com/b/project/archive/2011/04/20/visual-studio-team-foundation-server-2010-and-project-server-demo-virtual-machine.aspx

image47dd1de4

Buenas,

después de explicar hace un par de días sobre cómo desactivar IntelliTrace cuando se depura una aplicación, ayuda a mejorar la performance del IDE de Visual Studio 2010, dejo aquí 5 consejos que mejoran el rendimiento de Visual Studio 2010.

  • Lo dicho, si no lo  necesitas no actives IntelliTrace
  • Si trabajas con WPF, seguramente habrás notado que cada vez que abres en modo edición un elemento, esto es muy lento > pues cambia la opción para que los abra en modo XAML por defecto. Para esto, desde las opciones de Visual Studio 2010, seleccionar la sección [Text Editor // XAML // Miscelaneous] y activar la opción [Always open documents in full XAML view]

image

  • Para mejorar los tiempos de compilación y depuración, activar la opción [Only build starrup projects and dependencies on Run] en la sección [Projects and Solutions // Build and Run].

image

  • Muy importante > Visual Studio 2010 hace un uso muy grande de las capacidades gráficas de WPF, con lo que es recomendable que configures tu IDE para que aproveche estas capacidades. La opción [Automatically adjust visual experience based on client performance] en la sección [Environment] ayuda en este punto. Y además, dependiendo de la versión del sistema operativo que utilices, también encontrarás puntos a mejorar > por ejemplo, habilitar “Desktop Experience” en Windows Server 2008 o instalar Windows Automation UI si utilizas Windows XP.

image

Si tu ordenador no posee capacidades de aceleración gráfica, desactiva esta opción.

  • Salvo que desarrolles componentes para WinForms, en la sección [Windows Form Designer] desactiva la opción [Toolbox // AutoToolboxPopulate]. Esta opción carga automáticamente los componentes en la toolbox asociados con los proyectos compilados en una solución y fuerza “a un reload” de todos los componentes, con lo que la carga es bastante lenta.

image

Pues además de todo esto, siempre es recomendable:

  • Tener el disco defragmentado y limpio. Defraggler y CCleaner, son 2 productos gratuitos que te alegran el día.
  • Puede gustarte o no, pero un disco SSD es un cambio que se nota mucho cuando trabajas con Visual Studio 2010. Aquí JuanLu, te da un par de consejos al respecto.
  • Revisa la cantidad de extensiones y AddIns que tienes instalado en tu Visual Studio 2010. Es muy tentador entrar a la Visual Studio Gallery para descargar extensiones, pero claro, todo esto luego se paga en performance.
  • Aplica el sentido común: si Visual Studio 2010 funciona lento, Outlook funciona lento y el Notepad funciona lento, pues estos tips no te servirán para nada Open-mouthed smile

Saludos @ Home

El Bruno

   

Buenas,

otro tip de los buenos de ReSharper, en este caso que nos ayuda a ahorrarnos los 5 clicks o 15 segundos necesarios para agregar una referencia en un proyecto. Supongamos el siguiente escenario:

  • Proyecto de biblioteca de clases llamado ClassLibrary1, con una clase llamada Class1.
  • Proyecto de biblioteca de clases llamado ClassLibrary2, con una clase llamada NewClass.

En la clase NewClass escribimos el siguiente código y esperamos la ayuda contextual de ReSharper sobre la línea con la declaración y la referencia a Class1. Como se puede ver en la imagen, además de las típicas propuestas de crear una variable local, un parámetro, etc; ahora también tenemos una opción que agrega una referencia al proyecto ClassLibrary1 y luego nos permite utilizar el tipo Class1.

image

 

Esto no solo aplica a las referencias entre los proyectos de una solución. Si por ejemplo, declaramos un tipo del modelo de objetos del cliente de Team Foundation Server 2010 para Visual Studio 2010, también podremos ver como nos propone agregar una referencia dinámicamente al tipo Microsoft.TeamFoundation.Client.

image

 

Aunque, cuidado que este segundo ejemplo tiene trampa > ReSharper no es lo suficientemente inteligente para conocer TODOS LOS ENSAMBLADOS, sino que infiere el tipo a referenciar ya que una de las referencias del proyecto actual tiene esa referencia, en el ejemplo anterior, la referencia a ClassLibrary1 desde ClassLibrary2, permite importar las referencias del primero hacia el segundo

image

 

Otro +1 para ReSharper Open-mouthed smile

 

Saludos @ Home

El Bruno (@elbruno en Twitter)

image47dd1de4

Buenas,

lo he dicho en 100 charlas, lo he agregado en todos los documentos de configuración de Visual Studio 2010 en los que participio, lo he comentado en foros y respondido por correo, pero creo que nunca lo he escrito en un post. Así que, aquí lo tienes:

¡¡¡ NO ACTIVES INTELLITRACE SALVO QUE LO NECESITES !!!

¿Porqué?, pues muy fácil.

  • IT se adjunta al proceso en ejecución mientras depuras una aplicación, con lo que penaliza muy poco el rendimiento de la misma.
  • IT almacena el step-by-step de ejecución de la aplicación en disco, así que también tienes un trabajo de I/O extra en tu ordenador
  • IT guarda grandes cantidades de información, con lo que suma espacio en disco que disminuye sin ningún tipo de advantage
  • IT sólo es útil, si lo vas a utilizar, en caso contrario no tiene sentido

Podría escribir un par más, pero creo que la idea está clara. Y ahora, si tu instinto asesino no te indica el camino para desactivar intellitrace, pues en [Tools // Options] en la sección [IntelliTrace] ya tendrás el camino despejado.

image

 

Saludos @ Home

El Bruno

   

image47dd1de4

Buenas,

hoy toca darle un repaso a una extensión que si bien a mi no me termina de convencer, ya van varios que le dan el OK y la ven como algo fundamental > Solution Load Manager.

Esta extensión te permite configurar la forma en la que se cargarán los proyectos en una solución, de manera tal que el IDE de Visual Studio 2010 no los carga a todos y luego trabaja con los N proyectos cargados, sino que solo trabaja con los que les hayamos configurado.

Solution Load Manager Configuration

Hasta aquí la idea es genial ¿no?, pues personalmente pienso que si necesitas utilizar esta herramienta para poder compilar más rápidamente tu solución, pues lo que tienes es un mal diseño de tu solución. Otra opción es definir N soluciones diferentes con los diferentes proyectos que necesitas en cada caso, pero claro esa es solo mi opinión.

Y como he encontrado varias personas que le ven ventajas a la extensión, pues aprovecho para compartirla con el resto de personas de poca vida social que hayan leído este post hasta aquí.

Os dejo, más de 100 cervecitas en un cubo de hielo, 10 kgs de carne para el asado y yo escribiendo sobre una extensión de Visual Studio 2010 … Semana Santa preparate Open-mouthed smile

Descarga: http://visualstudiogallery.msdn.microsoft.com/66350dbe-ed01-4120-bea2-5564eff7b0b2

Saludos @ Home

El Bruno

   

image

Buenas,

pues el título del post te lo dice todo > 

A partir de Visual Studio 20XX no se incluirán más los proyectos de Setup (vdproj).

El post de Buck Hodges lo explica en detalle, aunque creo que es un excelente momento para matar estos tipos de proyectos y comentar a utilizar y extender WiX. Asi que ya sabes, si creas proyectos de setup, pues a pasarse a Wix, InstallShield, etc.

 

Saludos @ Home

El Bruno

   

Referencia: http://blogs.msdn.com/b/buckh/archive/2011/03/17/visual-studio-setup-projects-vdproj-will-not-ship-with-future-versions-of-vs.aspx?goback=%2Egde_104499_news_430263827

clip_image001

Buenas,

El próximo 5 de Mayo tendré la suerte o no de compartir con Juan Luis Guerrero un Workshop de Máxima productividad y 'Time-To-Market' con el nuevo RAD de Microsoft : Visual Studio LightSwitch y enfocado Windows Azure.

El evento es toda la mañana así que intentaremos destripar el producto de a poco y como siempre no te doy toda la info si la podes sacar desde aquí:

https://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032480432&Culture=es-ES

 

Saludos @ Here

El Bruno

   

Publicado 11/4/2011 22:09 por El Bruno | con no comments

image

Buenas,

dando vueltas por la web en busca de otras cosas, me encontré con este interesante proyecto en CodePlex: una herramienta para editar los Test Steps de los Test Cases sin utilizar Microsoft Test Manager 2010.

Segúnmi humilde criterio, un gran error en Visual Studio 2010, es que si bien puedes crear Test Cases desde dentro del IDE, para editar el detalle de los pasos de los mismos necesitas Microsoft Test manager 2010. Un momento, que yo no soy tonto y sé que esto está diseñado según el esquema de productos de Visual Studio 2010, etc. Pero habilitar la grid de datos dentro del IDE, hubiese significado un gran avance en este aspecto.

El boton [Open for edit]

image

nos lleva directamente a MTM2010, donde ya podremos editar los pasos del Test Case.

image

Pues bien, si no queremos acceder a MTM pero necesitamos modificar estos Test Steps, la herramienta de CodePlex: Test Step Editor puede ser una gran alterantiva.

image

Obviamente, no es un reemplazo para MTM2010, ni mucho menos, pero para una edición rápida y limpia de pasos de tests, es una gran alternativa.

 

Saludos @ Home

El Bruno

   

Descarga: http://teststepseditor.codeplex.com/

image47dd1de4

Buenas,

después de varios post relacionados con Team Build 2010, uno de los temas pendientes que dejé en el primer post era el cómo probar rápidamente las actividades personalizadas que creamos para Team Build 2010, en un proyecto de Test. Inicialmente propuse copiar el ensamblado generado al directorio de trabajo de VS2010 [%Program Files%\Microsoft Visual Studio 10.0\Common7\IDE\], aunque esto es un poco incómodo ya que una vez que has utilizado la dll, la misma queda tomada y necesitas reiniciar el IDE para poder actualizarla.

Una opción más elegante es crear un nuevo proyecto de Workflow Foundation y en el mismo probar la actividad personalizada para Team Build. Los siguientes pasos muestran como agregar un proyecto de prueba para este escenario.

Tutorial

1. En la solución que contiene el proyecto de las actividades personalizadas, agregar un nuevo proyecto del tipo [ActivityDesignerLibrary].

2. En el mismo agregar una referencia al proyecto de las actividades personalizadas.

3. Agregar además las siguientes referencias:

  • Microsoft.TeamFoundation.Build.Client
  • Microsoft.TeamFoundation.Build.Workflow
  • Microsoft.TeamFoundation.VersionControl.Client
  • Microsoft.TeamFoundation.WorkItemTracking.Client

4. Desde el repositorio de código fuente de Team Foundation Server 2010, copiar la plantilla base de builds [$/Team Project/BuildProcessTemplates/DefaultTemplate.xaml] y agregarla al proyecto. En este punto el proyecto debería quedar similar al siguiente:

image

5. Cuando editamos el archivo [DefaultTemplate.xaml] veremos en la Toolbox las actividades del proyecto de prueba de actividades y ya podremos agregar y trabajar con las mismas.

image

 

Pues bueno, esta es la forma “correcta” de trabajar con actividades personalizadas para estos casos Smile

 

Saludos @ Here

El Bruno

   

image47dd1de4

Buenas,

hoy toca publicar una actividad, que en sí es bastante simple, pero que nos ahorra infinidad de problemas cuando no la tenemos a mano: Directory.Copy(). Tal cual, más simple no puede ser y su propio nombre ya te da a entender lo que esperamos de la misma.

La clase que la implementa es muy simple, se basa en el siguiente código, donde lo importante son las propiedades

  • Source, define el directorio de origen a copiar
  • Target, define la ubicación del directorio de destino
  • DisplayInformation, que define si queremos mostrar información de los archivos copiados en el log de la Build
   1: using System.Activities;
   2: sing System.IO;
   3: sing Microsoft.TeamFoundation.Build.Client;
   4: sing Microsoft.TeamFoundation.Build.Workflow.Activities;
   5:  
   6: amespace ElBruno.TeamBuild.Activities
   7:  
   8:    [BuildActivity(HostEnvironmentOption.All)]
   9:    public class CopyDirectory : CodeActivity
  10:    {
  11:        [RequiredArgument]
  12:        public InArgument<string> Source { get; set; }
  13:  
  14:        [RequiredArgument]
  15:        public InArgument<string> Target { get; set; }
  16:  
  17:        [RequiredArgument]
  18:        public InArgument<bool> DisplayActionInformation { get; set; }
  19:  
  20:        protected override void Execute(CodeActivityContext context)
  21:        {
  22:            // get activity property values
  23:            var source = context.GetValue(Source);
  24:            var target = context.GetValue(Target);
  25:            var displayActionInformation = context.GetValue(DisplayActionInformation);
  26:            // copy
  27:            CopyFolder(context, source, target, displayActionInformation);
  28:        }
  29:  
  30:        static public void CopyFolder(CodeActivityContext context, string sourceFolder, string destFolder, bool displayActionInformation)
  31:        {
  32:            if (!Directory.Exists(destFolder))
  33:                Directory.CreateDirectory(destFolder);
  34:            var files = Directory.GetFiles(sourceFolder);
  35:            foreach (var file in files)
  36:                CopyFile(destFolder, file, displayActionInformation, context);
  37:            var folders = Directory.GetDirectories(sourceFolder);
  38:            foreach (var folder in folders)
  39:                CopyFolder(destFolder, displayActionInformation, context, folder);
  40:        }
  41:  
  42:        private static void CopyFolder(string destFolder, bool displayActionInformation, CodeActivityContext context, string folder)
  43:        {
  44:            var name = Path.GetFileName(folder);
  45:            if (name == null) return;
  46:            var dest = Path.Combine(destFolder, name);
  47:            var msg = string.Format(@"Copy Folder from [{0}] to [{1}]", name, dest);
  48:            context.TrackBuildMessage(msg, BuildMessageImportance.Normal);
  49:            CopyFolder(context, folder, dest, displayActionInformation);
  50:        }
  51:  
  52:        private static void CopyFile(string destFolder, string file, bool displayActionInformation, CodeActivityContext context)
  53:        {
  54:            var name = Path.GetFileName(file);
  55:            if (name == null) return;
  56:            var dest = Path.Combine(destFolder, name);
  57:            File.Copy(file, dest);
  58:            if (!displayActionInformation) return;
  59:            var msg = string.Format(@"Copy file from [{0}] to [{1}]", name, dest);
  60:            context.TrackBuildMessage(msg, BuildMessageImportance.Normal);
  61:        }
  62:    }

 

Una vez definida y compilada la actividad, agregamos la misma a la definición de la build, por ejemplo después de la ejecución de los tests unitarios, indicando como destino el directorio C:\Temp

image

Cuando ejecutamos la build, ya podremos ver en la misma, el log de archivos copiados a este directorio.

image

Para la próxima un poco sobre Intellisense y Team Build 2010.

Saludos @ Home

El Bruno

   

image47dd1de4

Buenas,

no ha coincidido con el lanzamiento del Service Pack 1 de Visual Studio 2010 o de Team Foundation Server 2010, pero ya está disponible la guía de instalación de Team Foundation Server 2010 con las actualizaciones que se incluyen en el Service Pack 1. La misma se puede descargar desde el siguiente link:

Descarga: http://www.microsoft.com/downloads/en/details.aspx?FamilyID=07AA12E5-2ED3-4DB8-96EB-51A48DCCB35D

Saludos @ Home

El Bruno

   

image47dd1de4

Buenas,

siguiendo con la línea de posts sobre la personalización de actiidades para Team Build 2010, hoy mostraré las 4 líneas de código necesarias para agregar un link en el output de una build en Team Foundation Server 2010.

En posts anteriores expliqué como crear una actividad personalizada para Team Build 2010, y sobre esa base hoy agregaremos la siguiente clase al proyecto de ejemplo:

using System;
using System.Activities;
using Microsoft.TeamFoundation.Build.Client;
 
namespace ElBruno.TeamBuild.Activities
{     [BuildActivity(HostEnvironmentOption.All)]     public class AddHyperLink : CodeActivity
    {         [RequiredArgument]         public InArgument<IBuildDetail> BuildDetail { get; set; }           [RequiredArgument]         public InArgument<string> DisplayText { get; set; }           [RequiredArgument]         public InArgument<string> Url { get; set; }           protected override void Execute(CodeActivityContext context)         {             // get activity property values
            var buildDetail = context.GetValue(BuildDetail);             var displayText = context.GetValue(DisplayText);             var url = context.GetValue(Url);             // add link to output
            buildDetail.Information.AddExternalLink(displayText, new Uri(url));             buildDetail.Information.Save();         }     }
}
 

Para este ejemplo, la clase trabaja con 3 propiedades:

  • DisplayText, el texto a mostrar
  • Url, la url de referencia para el texto
  • BuildDetail, la referencia al detalle de la Build para poder mostrar información en el mismo

Una vez compilada y en ejecución, modificaremos una definición de build para agregar esta actividad. Por ejemplo, dentro de [Run on Agent], en el final agregamos una actividad de este tipo para mostrar un link con el acceso al directorio de tests results:

image

Completamos las propiedaes con los valores especificados

image

Si protegemos la definición de la build y lanzamos la misma, podremos ver en el log, el nuevo link con el acceso al directorio de los test results:

image

Saludos @ Here

El Bruno

   

Más artículos Página siguiente >