July 2008 - Artículos

Buenas,

después de más de 12 horas de viaje Madrid –> Montevideo y mientras espero la conexión para Córdoba, recuerdo comentar que el próximo día 11 de Agosto compartiré un poco las experiencias sobre la Gestión del Ciclo de Vida en el Desarrollo de Software en mi ciudad natal –> Córdoba, con los amigos de Innovators Córdoba.

He aquí los detalles del evento:

TechNight: Gestion del ciclo de vida del desarrollo de aplicaciones con Visual Studio Team System.

En esta sesión veremos la aplicación de Visual Studio Team System 2008 en la gestión del ciclo de vida del desarrollo de aplicaciones. Conoceremos las herramientas que utilizan los gestores de proyecto, programadores, testers, arquitectos, etc.; y cómo se integran entre sí aprovechando las capacidades de Visual Studio Team System. Además veremos como la integración y capacidades de extensibilidad de VSTS permite adaptar estas herramientas a diferentes metodologías: CMMI, Agile, Scrum, etc.

Como se pueden imaginar, este evento es 100% orientado al trabajo con tecnologías Microsoft, aunque compartir experiencias sobre otras tecnologías siempre viene bien.

Se pueden inscribir al evento en el siguiente link

http://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032383931&Culture=es-AR

 

Saludos @ Montevideo

El Bruno

Crossposting from ElBruno.com
Publicado 31/7/2008 13:44 por El Bruno | 4 comment(s)
Archivado en: ,

Buenas,

si has necesitado crear documentos OpenXML dinámicamente utilizando el OpenXml SDK de Microsoft, seguramente te habrás llevado una decepción. El producto todavía está muy verde y la verdad es que hay que hacer mucho trabajo a mano.

Es por eso que esta herramiente puede ser de mucha utilidad cuando necesitas generar documentos dinámicamente:

OpenXMLDiff vNxt - Just an easy way of doing things

Sin entrar al detalle sobre cómo está codificada, esta pequeña y simple herramienta realiza un análisis sintáctico sobre la composición de los archivos xml que componen un documento OpenXml y lista la diferencia entre los mismos.

En mi caso –> recomendada

 

Saludos @ Home

El Bruno

Crossposting from ElBruno.com

Buenas

mientras preparo mis vacaciones que consistirán en un par de semanas en Córdoba/Argentina, necesito organizar algunas cosillas para estar preparado en mi tierra:

  • Una de ellas es una charla sobre ALM que daré el día 11 de Agosto en la UTN. Todavía no tengo el link de registro, pero ya postearé algo al respecto, porque trataré que no sea las charlas de ALM convencionales.
  • Como no estaré todo el día conectado y no cargaré con el portatil por todos lados, necesitaré postear desde el móvil. Para esto, he encontrado una aplicación muy completa en http://www.kevdaly.co.nz/Software/Blogging/Diarist.aspx. Posee integración con los motores de Blogs más populares (CommunityServer en mi caso) y si bien es un poco lenta para la PDA, funciona muy bien.
  • Finalmente preparar a Valentino (el de la foto) para presentarlo en sociedad con sus abuelos. Tarea que me dará satisfacciones, porque por lo que voy viendo, no me lo prestarán ni un sólo día. Es más, dudo que alguien me esté esperando a mi.

Saludos @ Hell

El Bruno

Crossposting from ElBruno.com

Buenas,

hoy es viernes y creo que puedo darme el lujo de salir un poco de temas de IT, para pasar a algo más importante aún: el placer de hacer bien las cosas y de perseguir tus sueños.

El siguiente video muestra un pequeño resumen de una charla que dio Randy Pausch hace un tiempo en Carnegie Mellon, la charla dura más de una hora, pero esta versión que se hizo en un especial de Oprah, sólo dura 10 minutos.

 

Debe ser que ser padre me ha cambiado, porque vi este video hace un tiempo y me dejó marcado.

Lamentablemente, hoy 15 de Julio, Randy Paush ha muerto; pero creo que su objetivo se ha cumplido (mira el video y entenderás de que hablo)

 

Saludos @ Home

El Bruno

Crossposting from ElBruno.com
Publicado 25/7/2008 20:33 por El Bruno | 12 comment(s)
Archivado en: ,

Buenas

interesante proyecto para extender las capacidades de la Service Factory, se trata de Service Factory Contrib Project, un nuevo proyecto en CodePlex donde se almacenarán las extensiones y personalizaciones sobre la Service Factory.

El comienzo no puede ser mejor incluyendo estos 2 contenidos:

  • The VB.NET Release: Edward Bakker, uno de los clásicos en los proyectos de Microsoft Patterns and Practices, hace unos meses se encargó de modificar el core de generación de código para dar soporte a la generación con Visual Basic. Net.
  • The Import WSDL Add-on: La gente de Digit Factory, ha creado una extensión que permite generar informacion en SF a partir de contratos de servicios WSDL ya existentes

Fuente: http://www.codeplex.com/wssfcontrib

Saludos @ Home

El Bruno

Crossposting from ElBruno.com

Buenas

para rematar un día que comenzó con el pie izquierdo, al momento de hacer unas demos sobre unos componentes de Enterprise Library; me encuentro con el siguiente error:

--------------------------- Application Error --------------------------- The 'System.Web.Security.SqlRoleProvider' requires a database schema compatible with schema version '1'. However, the current database schema is not compatible with this version. You may need to either install a compatible schema with aspnet_regsql.exe (available in the framework installation directory), or upgrade the provider to a newer version.This QuickStart requires a database configured with the ASP.NET services schema. Please make sure the database has been initialized using the aspnet_regsql.exe script, and that the QuickStart's app.config file contains the correct database connection string. --------------------------- OK ---------------------------

Parece que mi base de datos de Membership ha decido involucionar hasta un estado prehistórico. He estado leyendo un poco al respecto y no he encontrado una respuesta que me cierre completamente, pero a falta de una respuesta siempre viene bien la solución:

1. Lanzar la herramienta de configuración para las bases de datos de Membership [C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\aspnet_regsql.exe]

2. Seguir con el asistente y seleccionar la opción “Configure SQL Server for application services

3. Seleccionar el servidor y la base de datos que queremos configurar/actualizar; en este caso aspnetdb

4. Seleccionamos siguiente para confirmar los cambios

5. Listo.

 

La base de datos ha sido actualizada y ya podemos trabajar normalmente.

 

Saludos @ Here

El Bruno

Crossposting from ElBruno.com
Publicado 23/7/2008 20:33 por El Bruno | con no comments

Buenas

he aquí una cuestión interesante que puede llegar a plantearse cuando no has planeado correctamente un estrategia de branching par gestionar el codigo fuente de una aplicación:

¿Cuántas branches se han creado para este archivo/directorio?

Pues, es una cuestión delicada. En varias ocasiones me he encontrado con soluciones que “estaban vivas” en 2 branches en paralelo, y que el equipo de desarrollo no estaba al tanto de los cambios que se realizaban en ambas.

Es por eso, que si quieres conocer las diferentes Branches que se han generado para un elemento específico dentro del Source Control Explorer de Team Foundation Server, una forma fácil de hacerlo es seleccionar un elemento y desplegar el menú contextual sobre el mismo y seleccionar la opción Properties

Luego sobre el formulario de propiedades del elemento, en la pestaña Branches podremos ver la información relacionada a este elemento. Por ejemplo, en la siguiente imagen, se puede ver que desde el nodo Root de la solución de codigo, se han generado varias branches para versiones 1.1, 1.1.1, 1.1.2 y 1.2.

 

Como siempre, lo mejor es informarse un poco y que mejor que la Guía de Branching colgada en CodePlex: http://www.codeplex.com/BranchingGuidance

 

Saludos @ Home

El Bruno

Crossposting from ElBruno.com

Buenas

mientras termino de organizar mi viaje de un par de semanas a la tierra “madre”; comienzo a hacer un poco de análisis sobre este semestre y como no, cerveza de por medio, surge el inevitable tema de los mejores y peores proyectos.

Hace poco hablábamos con el amigo Edu sobre este tema y yo le comenté que por un lado, hay proyectos que me dan miedo: son aquellos donde se plantean objetivos muy ambiciosos en un período de tiempo muy corto. Por lo general este tipo de proyectos, suelen convertirse en un infierno de horas extras, y de esfuerzo no planificado, pero si tienes la suerte de poder coordinar bien estos proyectos, con la información adecuada, podrás tomar una decisión entre las 2 opciones:

  • es posible, pero con un gran esfuerzo
  • no es posible

Si el caso es el 1ro, y se gestiona bien, seguramente el proyecto será muy agobiante, pero llegarás a destino; tal vez invlusive lo consideres un éxito personal. Si el caso es el 2do y se da el OK para seguir, prepárate para pasarla mal un tiempo.

Estos proyectos suelen ser casi cotidianos, pero sin embargo no son los que más miedo me dan. Personalmente, me siento muy estresado en el tipo de proyectos donde la dirección cambia de parecer todos los días, donde no hay un rumbo fijo y donde las acciones se guían por el desconocimiento general de los mandos medios.

En estos proyectos, tal vez todo el esfuerzo de semanas de trabajo, se tire a la basura por un simple capricho. Por lo general, la prioridad siempre es apagar un incendio de la formá más rápida posible; pero sin tener en claro que tal vez un problema bien resuelto hoy, no sea un problema mañana; o lo que es peor, un problema mal resuelto hoy, se convierte en un infierno mañana.

Otro punto que cabe la pena mencionar, en este caso de desconcierto general, es la poca apreciación que se le tiene a los individuos. La falta de conciencia sobre el trabajo de los individuos se torna en un escenario constante, donde la desaprobación de los actos de los mismos, hace que la moral del equipo baje a por los subsuelos.

Pero sin embargo, el peor punto para cerrar, es que no suele existir una solución rápida. Cuando la dirección no es conciente de los errores que está realizando, suele ser por un problema de negación; y mucho menos se le puede pedir que tome acciones correctivas al respecto. El momento crítico suele llegar en situaciones muy tensas, donde los compañeros de trabajo, se dan cuenta que es mejor tomar otro rumbo, o que no merece la pena seguir en este estado.

Personalmente no estoy de acuerdo con esta opción, pero reconozco que en determinadas situaciones, lo mejor es saludar con una sonrisa y “a otra cosa mariposa”.

Da miedo, ¿no?

 

Saludos @ Hell

El Bruno

Crossposting from ElBruno.com
Publicado 21/7/2008 21:36 por El Bruno | 6 comment(s)
Archivado en:

Buenas,

ya podemos acceder a un nuevo CTP de Microsoft Robotics Developer Studio. En el mismo podemos encontrar un montón de nuevas herramientas y personalmente pienso que por fin tenemos una versión que incluye novedades y no solamente fixes.

He aqui una lista de los nuevos componentes:

1. Nuevos ejemplos y tutoriales:

1. DSS Node Discovery using UPnP: un ejemplo de UPnP que demuestra como utyilizar UPnP para la identificación de nodos DSS en una red.

2. Transport Extensibility: PipeTransport y PipeTransportHost son dos nuevos tutoriales que demuestran como crear un transporte desde cero y cómo utilizarlo.

3. LINQ: El tutorial 12 demuestra como suscribirse a eventos de Directory Service utilizanzo LINQ.

4. Silverlight: El control/visor de XBox demuestra como crear e interactuar con interfaces Silverlight.

5. Embedded Simulation Environment: El tutorial EmbeddedSim demuestra como integrar el Visual Simulation Environment en una aplicacion Windows Forms.

6. Simulated Pursuit Camera: El ejemplo PursuitCamera demuestra como implementar una entidad que representa una cámara para perseguir e indentificar objetos.

7. Simulated 4x4-drive: El ejemplo SimulatedFourByFourDrive demuestra como implementar un ejemplo que representa un coche 4x4.

2. Global Assembly Cache: Los ensamblados Core CCR y DSS assemblies están registrardos en la GAC.

3. Simulation on 64-bit machines: El entorno de Simulation ahora permite la ejecución del mismo en entornos de 64-bit.

4. Visual Studio Project Wizards: Los asistentes para proyectos de Visual Studio Project han sido reescritos para permitir la creación de una forma fácil de servicios en Visual Studio 2005 y 2008. Soportan Visual Basic .Net y C#.

5. Much Faster DSS Proxy Generation: La herramienta DssProxy ha sido reescrita para simplificar la generacion de Proxies. Adicionalmente se ha incluido mejoras para el .NET Compact Framework.

6. DSS Log Analyzer: La herramienta DSS Log Analyzer es un preview de una nueva herramienta de depuración y monitoreo que pemite visualizar y analizar el contenido y estado de los mensajes que viajan a traves de los diferentes nodos de una orquestación MRDS.

7. Embedded Visual Simulation Environment: Ahora es posible “embebber” el entorno de simulacion en otras aplicaciones, además de la clásica interfaz de aplicacion Windows.

Más información: Welcome to Microsoft Robotics Developer Studio 2008 CTP July

Descarga: http://www.microsoft.com/downloads/details.aspx?FamilyId=57CE326B-2125-4163-A33F-ED2F69E03B56&displaylang=en#filelist

 

Saludos @ El Bruno

El Bruno

Share this post :
Crossposting from ElBruno.com

Buenas,

continuamos con la semana de releases y en esta ocasión le toca de nuevo al perfil de profesionales de base de datos. El nombre oficial es Microsoft® Visual Studio Team System 2008 Database Edition GDR July CTP y se puede descargar desde http://www.microsoft.com/downloads/details.aspx?FamilyID=bb3ad767-5f69-4db9-b1c9-8f55759846ed&displaylang=en

Estas son algunas de las características que posee esta CTP:

  • Incluye el soporte para upgrade de proyectos de base de datos
  • No se soporta más los proyectos mixtos (una sabia decisión y bastante requerida por la comunidad de developers)
  • Incluye soporte para que el intérprete comprenda la sintaxis de tablas temporales y sentecias Select Into.
  • Se ha incluido una tarea para MSBuild para realizar análisis de código.
  • Etc …

Fuente: http://blogs.msdn.com/bharry/archive/2008/07/19/vstsdb-2008-gdr-july-ctp-is-now-available.aspx

 

Saludos @ Home

El Bruno

 

Share this post :
Crossposting from ElBruno.com

Buenas,

día interesante con un lanzamiento que también estaba esperando; las Power Tools del mes de Julio para Team Foundation Server 2008. El amigo Luis ya nos lo comentó esta mañana; pero yo como soy cotilla quiero entrar en detalle de una de las nuevas características que han incorporado y que más me agradan: se trata de un nuevo formulario para la suscripción de alertas a eventos de Team Foundation Server 2008.

Nueva User Interface

A simple vista, llama la atención el nuevo nodo dentro de un Team Explorer de alertas:

Cuando hacemos doble click en el mismo, veremos la nueva UI donde podremos definir nuestras alertas teniendo en cuenta que las mismas ahora se pueden categorizar en alertas para

  • eventos de WorkItems
  • eventos de CheckIn
  • eventos de Build

Una vez creado un evento, por ejemplo de CheckIn [Check-In to a specific folder happens] podremos definir

  • el nombre de la alerta
  • el formato de entrega de informacion de esta alerta: HTML, PlainText o SOAP (ojo con esta opción :D)
  • el destinatario, o los destinatarios de la alerta
  • una serie de filtros para definir la información específica que queremos obtener

Source Control Explorer Alerts

Pero esto no es todo, además de poder definir alertas específicas desde el editor general, podemos crear las mismas desde diferentes secciones del IDE de Microsoft Visual Studio 2008. Por ejemplo, desde el panel Source Control Explorer, seleccionando un folder y desplegando el menú contextual sobre el mismo

 

podremos ver la nueva opción Alert On Change, que creará una nueva alerta para los eventos de cambios de los elementos de este directorio.

Work Items Alerts

Adicionalmente, sobre una lista de resultados de WorkItems, también podremos seleccionar la opción Alert On Change

y crear una alerta rápidamente para los cambios sobre este WorkItem.

 

Todavía me quedan por probar un par de nuevas características o new features de las Power Tools para estar “tranquilo” de noche, pero si merecen la pena, seguro que postearé algo al respecto. El nuevo suscriptor de alertas lo merece.

 

Saludos @ El Bruno

El Bruno

 

Share this post :
Crossposting from ElBruno.com
Publicado 17/7/2008 23:15 por El Bruno | con no comments

Buenas

todavía no hay fecha oficial, pero sabemos que el lanzamiento del Service Pack 1 de Microsoft Visual Studio 2008 será durante este verano, sin embargo además de los posts que podemos encontrar por alli con las novedades que trae el service Pack, ahora también podemos comenzar a leer la documentación del mismo.

Obviamente, si la documentación está online, el camino hacia el SP está mucho más cercano.

 

Saludos @ Home

El Bruno

Share this post :
Crossposting from ElBruno.com

Buenas,

como para empezar una semana interesante, lo primero que me encuentro al comenzar a probar mis servidores de test es el siguiente error:

1 The agent status has been automatically changed by the Team Build Server. 2 New status: 'Unreachable' 3 Reason: TF215076: Team Foundation Build on computer TFSBUILDDEMOSERVER (port 9191) is not responding. (Detail Message: Unable to connect to the remote server)

Por algún motivo extraño, uno de mis agentes de Build de Team Foundation Server 2008 se ha desactivado y las compilaciones automáticas no se han ejecutado durante el fin de semana.

Después de investigar un poco, me encuentro el siguiente estado en el servicio de Build; por lo que deduzco que el servicio no se ha iniciado correctamente (que pena !!!)

 

Después de ver un poco el visor de eventos de Windows, veo que una nueva política ha deshabilitado el servicio HTTP SSL, ya que no es necesario utilizarlo en esta máquina. Sin embargo, este servicio es una de las dependencias que posee el servicio de Build, por lo que sin esta referencia el mismo no arranca.

Solución inteligente –> eliminar la dependencia de este servicio y reiniciar el mismo; y vamos que así da gusto comenzar el día.

 

Saludos @ Hell

El Bruno

Share this post :
Crossposting from ElBruno.com

Buenas,

domingo a altas horas de la mañana comienzo a preparar lo que será una semana interesante y entre una de las tareas que tengo atrasadas desde hace tiempo, se encuentra la planificación para optimizar un servidor de Team Foundation Server 2008. En este server, han trabajado cerca de 30 personas durante más de un año; con lo que el volumen de información que posee el mismo es considerable. Lamentablemente, en el setup inicial del server, el mismo se instalo en modo “Single Server”; con lo que las capacidades del mismo se han ido degradando progresivamente con el paso del tiempo.

A punto estaba de ponerme a escribir el paso a paso, cuando encontré que en las ultimas actualizaciones de la documentacion en MSDN de Team Foundation Server 2008, ya han incluido este escenario:

How to: Move the Data Warehouse SQL Server Analysis Services Database to a Separate Server

Por lo que mi trabajo será simplemente definir los nombres específicos de cada paso para adecuarlos a mi entorno.

Gracias amigos de MSDN :D

 

Saludos @ Home

El Bruno

Share this post :
Crossposting from ElBruno.com

Buenas

have unos días comenté como utilizar el elemento <BuildStep /> para publicar mensajes al formulario de progreso de build de Microsoft Visual Studio 2008 y de Team System Web Access. Pero como ando un poco corto de cerebro, me dejé uno de los detalles más interesantes de este elemento.

En realidad, además de generar una nueva línea de notificacion dentro de la ventana de progreso, luego podremos trabajar con el contenido de la misma. Por ejemplo, en el siguiente script en la línea 8, defino un nuevo mensajes notificando el comienzo de la publicación con ClickOnce del proyecto y luego en la línea 10 obtengo el id de este mensaje con el par de atributos @TaskParameterId y @PropertyName en una variable llamada “ClickOnceDeployId”.

1 <!-- 2 ================================= 3 DEPLOY WITH CLICK ONCE 4 ================================= --> 5 6 <Target Name="AfterCompile" DependsOnTargets="BuildNumberOverrideTarget"> 7 8 <BuildStep TeamFoundationServerUrl="$(TeamFoundationServerUrl)" BuildUri="$(BuildUri)" Name="ClickOnceDeploy" 9 Message="Start Click Once Deploy to &quot;\\TFSRTM08\ClickOnce\&quot; Version=$(VersionMajor).$(VersionMinor).$(VersionBuild).$(VersionRevision)"> 10 <Output TaskParameter="Id" PropertyName="ClickOnceDeployId" /> 11 </BuildStep> 12 13 <sleep sleepTimeOut="1000"></sleep> 14 <MSBuild Projects="$(SolutionRoot)\ClickOnceDemo\ClickOnceDemo\ClickOnceDemo.csproj" 15 Properties="PublishDir=\\TFSRTM08\ClickOnce\;ApplicationVersion=$(VersionMajor).$(VersionMinor).$(VersionBuild).$(VersionRevision)" 16 Targets="Publish" /> 17 <sleep sleepTimeOut="1000"></sleep> 18 19 <BuildStep TeamFoundationServerUrl="$(TeamFoundationServerUrl)" BuildUri="$(BuildUri)" 20 Name="EndClickOnce" Id="$(ClickOnceDeployId)" Message="Click Once Deployed" Status="Succeeded" /> 21 22 </Target>

Posteriormente en el siguiente <BuildStep /> en la línea 19, modifico el contenido del mensaje original gracias al Id obtenido anteriormente. Como con un par de imágenes no queda visible, lo mejor es un pequeño video de la ejecución de la Build.

El paso de ClickOnce está en el segundo 24 aproximadamente y se puede ver como el mismo, tarda 2 segs o más y cambia su contenido luego de ser ejecutado.

Video

 

Saludos @ Home

El Bruno

Share this post :
Crossposting from ElBruno.com

Buenas,

el amigo Luis nos comentó hace poco cómo incrementar el numero de versión en cada build basado en un post de otro crack: Martin Woodward. Como estoy en la línea del conformismo inconformista y los ejemplos anteriores no me bastaban, tuve que modificar un poco la tarea de TFS para que pueda incrementar bajo determinadas condiciones, los valores de Major Build, Minor Build, Revision, Build.

De esta forma el código de la nueva tarea permite que de acuerdo a las propiedades UpdateVersionMajor, UpdateVersionMinor, UpdateVersionRevision y UpdateVersionBuild se puede especificar que partes de la versión se desea incrementar con respecto a la versión anterior. Este es el código fuente de la tarea:

1 using System; 2 using System.IO; 3 using Microsoft.Build.Framework; 4 using Microsoft.Build.Utilities; 5 6 namespace ElBruno.TFS.Tasks 7 { 8 /// <summary> 9 /// A simple task to increment the number stored in a passed file. 10 /// </summary> 11 public class IncrementingNumber : Task 12 { 13 /// <summary> 14 /// When overridden in a derived class, executes the task. 15 /// </summary> 16 /// <returns> 17 /// true if the task successfully executed; otherwise, false. 18 /// </returns> 19 public override bool Execute() 20 { 21 IncrementVersionNumber(); 22 return true; 23 } 24 25 /// <summary> 26 /// Increments the version number. 27 /// </summary> 28 public void IncrementVersionNumber() 29 { 30 // get version content 31 string fileContent = string.Empty; 32 if (File.Exists(VersionFile)) 33 fileContent = File.ReadAllText(VersionFile); 34 35 // upgrade version number 36 if (!string.IsNullOrEmpty(fileContent)) 37 { 38 string[] version = fileContent.Split('.'); 39 // get current values 40 if (version.Length > 0) 41 NewVersionMajor = Convert.ToInt32(version[0]); 42 if (version.Length > 1) 43 NewVersionMinor = Convert.ToInt32(version[1]); 44 if (version.Length > 2) 45 NewVersionBuild = Convert.ToInt32(version[3]); 46 if (version.Length > 3) 47 NewVersionRevision = Convert.ToInt32(version[2]); 48 49 // increment if defined 50 if (UpdateVersionMajor) 51 NewVersionMajor++; 52 if (UpdateVersionMinor) 53 NewVersionMinor++; 54 if (UpdateVersionBuild) 55 NewVersionBuild++; 56 if (UpdateVersionRevision) 57 NewVersionRevision++; 58 } 59 else 60 { 61 NewVersionMajor = 1; 62 NewVersionMinor = 0; 63 NewVersionBuild = 0; 64 NewVersionRevision = 0; 65 } 66 67 // create new content 68 fileContent = 69 string.Format(@"{0}.{1}.{2}.{3}", NewVersionMajor, NewVersionMinor, NewVersionRevision, NewVersionBuild); 70 71 // delete file if exists 72 if (System.IO.File.Exists(VersionFile)) 73 System.IO.File.Delete(VersionFile); 74 75 // create new file 76 System.IO.File.WriteAllText(VersionFile, fileContent); 77 VersionFileContent = fileContent; 78 } 79 80 #region Input Parameters 81 82 private string versionFile = "version.txt"; 83 84 /// <summary> 85 /// Gets or sets the version file. 86 /// </summary> 87 /// <value>The version file.</value> 88 [Required] 89 public string VersionFile 90 { 91 get { return versionFile; } 92 set { versionFile = value; } 93 } 94 95 private string versionFileContent; 96 97 /// <summary> 98 /// Gets or sets the content of the version file. 99 /// </summary> 100 /// <value>The content of the version file.</value> 101 public string VersionFileContent 102 { 103 get { return versionFileContent; } 104 set { versionFileContent = value; } 105 } 106 107 /// <summary> 108 /// Gets or sets a value indicating whether [update version major]. 109 /// </summary> 110 /// <value><c>true</c> if [update version major]; otherwise, <c>false</c>.</value> 111 public bool UpdateVersionMajor { get; set; } 112 113 /// <summary> 114 /// Gets or sets a value indicating whether [update version minor]. 115 /// </summary> 116 /// <value><c>true</c> if [update version minor]; otherwise, <c>false</c>.</value> 117 public bool UpdateVersionMinor { get; set; } 118 119 120 /// <summary> 121 /// Gets or sets a value indicating whether [update version revision]. 122 /// </summary> 123 /// <value> 124 /// <c>true</c> if [update version revision]; otherwise, <c>false</c>. 125 /// </value> 126 public bool UpdateVersionRevision { get; set; } 127 128 /// <summary> 129 /// Gets or sets a value indicating whether [update version build]. 130 /// </summary> 131 /// <value><c>true</c> if [update version build]; otherwise, <c>false</c>.</value> 132 public bool UpdateVersionBuild { get; set; } 133 134 #endregion 135 136 137 // OUTPUT PARAMETERS 138 /// <summary> 139 /// Gets or sets the new version major. 140 /// </summary> 141 /// <value>The new version major.</value> 142 [Output] 143 public int NewVersionMajor { get; set; } 144 /// <summary> 145 /// Gets or sets the new version minor. 146 /// </summary> 147 /// <value>The new version minor.</value> 148 [Output] 149 public int NewVersionMinor { get; set; } 150 /// <summary> 151 /// Gets or sets the new version revision. 152 /// </summary> 153 /// <value>The new version revision.</value> 154 [Output] 155 public int NewVersionRevision { get; set; } 156 /// <summary> 157 /// Gets or sets the new version build. 158 /// </summary> 159 /// <value>The new version build.</value> 160 [Output] 161 public int NewVersionBuild { get; set; } 162 163 } 164 } 165

Finalmente dentro de nuestro proyecto de compilación, podemos agregar la siguiente seccion para incrementar el número de versión. En el siguiente ejemplo, se especifica que en cada compilación se incrementen los valores de Build y Revisión (línea 17) y deja los nuevos valores para la versión en las variables $(VersionMajor), $(VersionMinor), $(VersionBuild), $(VersionRevision).

Luego, en la línea 27, se crea un nuevo nombre de Build donde se aplica el nuevo número de versión.

1 <UsingTask AssemblyFile="$(MSBuildExtensionsPath)\ElBruno.TFS.Tasks.dll" 2 TaskName="ElBruno.TFS.Tasks.IncrementingNumber" /> 3 <!-- 4 ================================= 5 INCREMENT VERSION NUMBER 6 ================================= --> 7 8 <PropertyGroup> 9 <VersionMajor>1</VersionMajor> 10 <VersionMinor>0</VersionMinor> 11 <VersionService>0</VersionService> 12 <VersionBuild>6</VersionBuild> 13 </PropertyGroup> 14 <Target Name="BuildNumberOverrideTarget"> 15 <BuildStep TeamFoundationServerUrl="$(TeamFoundationServerUrl)" BuildUri="$(BuildUri)" Name="StartIncrement" 16 Message="Loading last build number from file &quot;$(SolutionRoot)\ClickOnceDemo\version.txt&quot;" Status="Succeeded" /> 17 18 <!-- Increment number --> 19 <IncrementingNumber VersionFile="$(DropLocation)\buildnumber.txt" UpdateVersionBuild="true" UpdateVersionRevision="true" > 20 <Output TaskParameter="NewVersionMajor" PropertyName="VersionMajor" /> 21 <Output TaskParameter="NewVersionMinor" PropertyName="VersionMinor" /> 22 <Output TaskParameter="NewVersionBuild" PropertyName="VersionBuild" /> 23 <Output TaskParameter="NewVersionRevision" PropertyName="VersionRevision" /> 24 25 </IncrementingNumber> 26 <PropertyGroup> 27 <BuildNumber>$(BuildDefinitionName)_$(VersionMajor).$(VersionMinor).$(VersionBuild).$(VersionRevision)</BuildNumber> 28 </PropertyGroup> 29 30 <BuildStep TeamFoundationServerUrl="$(TeamFoundationServerUrl)" BuildUri="$(BuildUri)" Name="EndIncrement" 31 Message="Build number set to &quot;$(BuildNumber)&quot;" Status="Succeeded" /> 32 </Target> 33

Saludos @ Marron

El Bruno

Share this post :
Crossposting from ElBruno.com

Buenas,

por unos días seguiré con algunos posts sobre MSBuild, ya que ahora que me ha tocado volver a configurarlos en Team Foundation Server 2008 me encuentro con algunas novedades muy interesantes.

Por ejemplo, hoy toca uno de los ejemplos más simples: ¿cómo publicar un proyecto con ClickOnce de forma automatizada en un proyecto de compilación?

Pues la respuesta es muy simple, y si una imagen vale más que 1000 palabras, un par de líneas de código, valen por lo menos 500 palabras:

1 <Import Project="$(MSBuildExtensionsPath)\MSBuildCommunityTasks\MSBuild.Community.Tasks.Targets"/> 2 <!-- 3 ================================= 4 DEPLOY WITH CLICK ONCE 5 ================================= --> 6 7 <PropertyGroup> 8 <VersionMajor>1</VersionMajor> 9 <VersionMinor>0</VersionMinor> 10 <VersionService>0</VersionService> 11 <VersionBuild>6</VersionBuild> 12 </PropertyGroup> 13 14 <Target Name="AfterCompile" DependsOnTargets="BuildNumberOverrideTarget"> 15 16 <BuildStep TeamFoundationServerUrl="$(TeamFoundationServerUrl)" BuildUri="$(BuildUri)" Name="StartClickOnce" 17 Message="Start Click Once Deploy to &quot;\\TFSRTM08\ClickOnce\&quot; Version=$(VersionMajor).$(VersionMinor).$(VersionBuild).$(VersionRevision)" Status="Succeeded" /> 18 19 <MSBuild Projects="$(SolutionRoot)\ClickOnceDemo\ClickOnceDemo\ClickOnceDemo.csproj" 20 Properties="PublishDir=\\TFSRTM08\ClickOnce\;ApplicationVersion=$(VersionMajor).$(VersionMinor).$(VersionBuild).$(VersionRevision)" 21 Targets="Publish" /> 22 23 <BuildStep TeamFoundationServerUrl="$(TeamFoundationServerUrl)" BuildUri="$(BuildUri)" Name="EndClickOnce" 24 Message="End Click Once Deploy" Status="Succeeded" /> 25 26 </Target>

este pequeño fragmento de código muestra un par de cosillas interesantes a tener en cuenta:

  • Entre las líneas 7 y 12, defino un <PropertyGroup /> con los futuros valores para la versión de publicación (cuando tenga tiempo muestro como evolucionar un poco el post de Luis sobre una version incremental en cada build).
  • Sobreescribo el <Target /> AfterCompile para introducir dentro del mismo las opciones de generación.
  • En la línea 19 defino una tarea <MSBuild /> que es la encargada de publicar la aplicación, invocando el proyecto que queremos publicar con el atributo @Projects y las propiedades de publicación con el atributo @Properties.
  • En el atributo @Properties se especifica el directorio de publicación y la versión de publicación.
  • Una vez más utilizo <BuildStep /> para notificar en la ventana de progreso las acciones de publicación.

La siguiente imagen muestra un pequeño ejemplo de un proyecto de compilación. Como se puede ver dentro del mismo, los pasos de publicación con ClickOnce se ejecutan después de la compilación del proyecto.

Saludos @ Home

El Bruno

 

Share this post :
Crossposting from ElBruno.com

Buenas,

mientras sigo sufriendo en un proyecto donde no paran de sumarse despropósitos a setas que aparecen constantemente, una de las tareas que realizo consiste en configurar los builds para las diferentes verticales y aplicaciones que conforman la solución.

Si alguna vez has creado proyectos personalizados de compilación, seguramente coincidirás conmigo que la edición, depuración y prueba de los mismos es bastante tedioso. Especialmente, en lo refereido a la depuración, ya que una de las principales herramientas que posees es la acción <Message /> que básicamente agrega una línea de texto al log de compilación.

Pero si quieres ir un poco más allá y agregar información en la ventana de progreso del Build de Microsoft Visual Studio 2008 o de progreso de build en Team System Web Access, puedes hacerlo gracias a la acción <BuildStep /> (esto en Visual Studio 2005 era casi peor que un infierno, ya que era necesario hacerlo a través de WebServices, de forma síncrona, etc…)

Por ejemplo, la siguiente tarea dentro de un proyecto de build

1 <Target Name="BuildNumberOverrideTarget"> 2 <BuildStep TeamFoundationServerUrl="$(TeamFoundationServerUrl)" BuildUri="$(BuildUri)" Name="StartIncrement" 3 Message="Loading last build number from file &quot;$(SolutionRoot)\ClickOnceDemo\version.txt&quot;" Status="Succeeded" /> 4 </Target> 5

se vería en Microsoft Visual Studio 2008 de la siguiente forma

o en Team System Web Access como muestra la siguiente imagen

Como podemos ver, la utilizaciòn de <BuildStep /> permite de una forma fácil y sencilla incorporar información de seguimiento y trazas a nuestros proyectos de Build.

Referencia: http://msdn.microsoft.com/es-es/library/bb399129.aspx

 

Saludos @ Home

El Bruno

 

Share this post :
Crossposting from ElBruno.com

Buenas,

mientras trato de aprender algún tipo de técnica de relajación mental, para comenzar una semana complicada; se me ocurre que además de la clásica regla [el que rompe un build pone 1€ en la ucha de las cervezas] debo pensar en algo relacionado con las políticas de CheckIn.

Hace un tiempo comenté que afortunadamente en Team Foundation Server 2008 ya poseemos esta información en la base de datos de DataWareHouse de TFS. Pero claro, lo mejor en este caso, es crear un informe que nos muestre esta información.

Si quieres saber como comenzar con este tipo de informes de Excel, este post es el camino y con el Excel ya configurado podemos comenzar a trabajar la perspectivaa Code Churn. Por ejemplo, podemos organizar los siguientes campos en la hoja

Column Labels Date
Row Labels Alias
  Policy Override Comment
Values Code Churn Count

 

para obtener los siguientes resultados en formato tabla y gráfico:

 

Como se aprecia en el chart, no sólo podemos ver que integrantes del equipo han “saltado” una política de Check-In, sino que además podemos ver la cantidad de líneas de código asociadas al ChangeSet donde se saltó la política y además la fecha en la que se realizó esta acción, etc. (recordad que podemos realizar los cruces de información que se nos ocurran)

En este momento debemos decidir si también es necesario poner 1€ en la ucha de las cervezas cuando alguien salta una política de Check-In; o siendo un poco más realistas analizar el porqué de estas situaciones y si realmente las políticas que definimos para nuestros Team Projects son las que nuestro equipo necesita.

 

Saludos @ Home

El Bruno

 

Share this post :
Crossposting from ElBruno.com

 

Buenas,

todavía no he tenido la suerte de participar en ningún proyecto donde pueda trabajar codo a codo con expertos en interfaz de usuario que utilicen la suite de productos Microsoft Expression. Sin embargo, sobre lo pocon que conozco al respecto, algo que echaba en falta es la capacidad de integracion de la suite con Team Foundation Server 2008.

Siendo realista y pensando en uno o más diseñador/es dentro de un equipo de trabajo, esta carencia me parecia un escollo bastante importante de salvar, ya que la gestión del equipo se puede volver un poco tediosa.

Por suerte nuestros amigos de Redmond ya estan trabajan do en ello y segun palabras de Brian Harry, en un futuro cercano podremos ver las tipicas acciones de Check-In, Check-Out, asociación a tareas, etc. integradas en Microsoft Expression.

Espero que cuando me toque un proyecto de este tipo, ya este disponibles estas caracteristicas. En caso contrario a sumar paciencia y a explicar como desde Expression se realizan algunas tareas y con el Team Explorer nos encargamos de otras.

 

Saludos @ Hell

El Bruno

Share this post :
Crossposting from ElBruno.com
Más artículos Página siguiente >