October 2010 - Artículos

image47dd1de4

Buenas,

hace casi medio año Brian Harry comentó en un post como el equipo de producto de Team Foundation Server estaba evaluando las modificaciones necesarias para poder ejecutar instancias de TFS2010 en Azure. En este post comenta los principales cambios que tuvieron que llevar a cabo, donde uno de los principales trabajos fue reemplazar las sentencias [SELECT INTO] por trabajo con tablas temporales, ya que Azure requiere claves principales en todas las tablas (por cuestiones de redundancia) y la sentencia [SELECT INTO] no utiliza primary keys; además de este escenario comenta los cambios con formatos XML en SQL, etc.

Ahora que el PDC2010 tiene la mayoría de sus focos en Azure, pues nuevamente Brian Harry ha apostado fuerte y ha mostrado una demonstración completa de TFS2010 sobre plataforma Azure, vamos que aqui el Valentino le diría un “TFS on the Cloud”. En la demo, Brian Harry, mostro los siguientes componentes de TFS2010 montados en Azure:

  • TFS2010 ASP.Net Application Tier, soportada como un WebRole
  • TFS2010 Job Service, soportado como un Worker Role
  • TFS2010 Build Controller, soportado con un Azure VM Role

En este post, Brian comenta muchos más detalles sobre el trabajo de modificacion y migración de TFS2010 para que sea soportado por Azure.

Personalmente, creo que la capacidad de poder trabajar con un TFS2010 en una plataforma cloud, nos obligará a pensar en los siguientes puntos

¿Realmente necesitamos un TFS online 24x7?

He conocidos muchos equipos pequeños que en un año de 12 meses, pueden estar un cuerto del tiempo, realizando pruebas, deciciendo caminos, etc.; en estos casos no creo que tener un TFS online todo el tiempo sea necesario, pero claro “activar cuando lo necesites” tal vez se convierta en tenerlo activo todo el tiempo. Mi opinion, TFS es un servicio si o sí –> 24x7

 

¿Vale la pena ahorrar el coste de mantenimiento de un TFS y utilizar servicios externos?

Aquí la respuesta es mucho más simple –> yo no quiero dedicarme a administrar, parchear, configurar, etc.; un servidor; mi trabajo es codificar, refactorizar, mejorar, probar, codificar, etc. Si puedo ahorrarme este trabajo, puedo pensar seriamente en poner en la balanza “tiempo invertido en administración” vs “tiempo dedicado a la creación de software”

 

¿Vale la pena ahorrar hardware y montar mi TFS2010 en Azure?

El punto final, donde la pregunta es si me quiero ahorrar el coste y mantenimiento de un Hardware para un Software determinado. Seguramente con un producto no MS, me lo pensaría varias veces; pero al ser TFS un producto MS, supongo que el día que den soporte para Azure oficialmente; ya podremos estar seguros de que los Services Packs, HotFixes, etc. con los que lidiamos en nuestro día a día, pues estarán repartido 50/50 entre los recursos de Hardware que hemos reemplazado con Azure y TFS2010 que seguirá siendo nuestra responsabilidad. En otras palabras, no me lo pensaría 2 veces, si los números (el €uro manda) me dan aproximados, lo montaría On the Cloud

 

Otros temas

Y además no debo olvidarme de los temas “calientes” de este modelo de negocio, como la protección y ubicación de los datos (el código fuente es una propiedad intelectual muy valiosa); la disponibilidad del servicio (99.999999% deja unos minutos al año sin TFS), etc.

 

Por ahora espero con ansias poder tener la oportunidad de probar una versión de TFS2010 montada en Azure para, por un lado conocer un poco más de Azure, y por otro ver como es la nueva arquitectura que ha de tener TFS2010 en este entorno. ¿Para un equipo de desarrollo? pues será casi igual Risa

 

Saludos @ Home

El Bruno

   

Fuente: http://blogs.msdn.com/b/bharry/archive/2010/10/28/tfs-on-windows-azure-at-the-pdc.aspx

image47dd1de4

Buenas,

actualización de la lista de enlaces para dar los primeros pasos con MSBuild.

Cómo empezar

 

Varios

 

 

Saludos @ Here

El Bruno

   

image47dd1de4

Buenas,

en Visual Studio 2010 no existe la opción para hacer un Branch a partir de un Label en el IDE de Visual Studio. Si bien es posible hacerlo utilizando un comando del estilo

tf.exe / branch /version: SomeVersion

se echaba en falta la ópción para hacerlo desde el IDE. (más de uno sabe que soy enemigo acérrimo de las herramientas por línea de comando)

Pues bien, el 3 de Agosto se liberó un parche que agrega esta opción al IDE. El mismo se puede descargar desde: http://code.msdn.microsoft.com/KB983504/Release/ProjectReleases.aspx?ReleaseId=4749 y una vez instalado, ya podremos ver la nueva opción para crear Branches:

image

 

Saludos @ Here

El Bruno

   

Fuente: http://support.microsoft.com/kb/983504

Descarga: http://code.msdn.microsoft.com/KB983504/Release/ProjectReleases.aspx?ReleaseId=4749

image

Buenas,

hace unos días escribí un post donde comenté en 10 pasos como crear una aplicación con el entorno de Simulación de Microsoft Robotics para poder controlar a un Lego Mindstorm NXT Tribot virtual con un joystick virtual.

Ahora bien, una de las ventajas de Microsoft Robotics, es que tenemos incorporados varios tipos de robots con los que podemos trabajar. Los siguientes pasos siguen después del tutorial anterior para controlar nuestra demo con un iRobot Roomba virtual y finalmente para controlar el Lego Mindstorm NXT Tribot real.

Tutorial

1. Seleccionar el [Generic Differential Drive]

2. En las propiedades del mismo, seleccionar un nuevo manifiesto con el botón [Import]

3. En el listado de manifiestos, seleccionar [iRobot.Create.Simulation.Manifiest.xml]

image

 

4. Una vez seleccionado el manifiesto, grabamos el proyecto y ejecutamos el mismo.

5. El entorno de simulación y el joystick virtual se activan, y dentro del entorno podremos ver el iRobot Roomba.

image 

6. En este punto cambiaremos la configuración del [Generic Differential Drive] para que el mismo se conecte con un Lego Mindstorms NXT.

7. En la selección de manifiestos seleccionamos [Lego.NXT.TriBot.Manifiest.xml]

image

8. Guardamos y ejecutamos el proyecto; y ya podemos controlar un robot real con 4 clicks !!!

image

 

Saludos @ Home

El Bruno

   

image

Buenas,

después de pasear un poco el LEGO y el lanza misiles USB por Sevilla y por Madrid, es momento de colgar las presentaciones y el código fuente de las demos, para que los valientes que quieran echarle un vistazo … pues lo tengan a mano.

Materiales del evento en Sevilla:

 

Materiales del evento en la Universidad Autónoma de Madrid

 

Aprovecho además para agradecer a todos los que se encargaron de organizar los eventos, ya que además de pasar un buen rato, pues aprovechamos y compartimos un poco de experiencia Risa

Como nuestro amigo pregunton cojonero, suele preguntar si se grabaron los eventos, pues en ambos casos se grabaron; no tengo ni idea de la calidad de los mismos, pero creo que después de pasar por las manos de Lucas Art y de reemplazarme por alguno más guapo, estarán disponibles al público. Cuando sepa las urls las publico.

 

Saludos @ Here

El Bruno

   

imageBuenas,

como siempre en las charlas de Microsoft Robotics me fallan la mitad de las demos, hoy dejaré un paso a paso para poder crear una aplicación de robótica en 10 minutos. Para esto utilizaremos el entorno de simulación de Microsoft Robotics,  un controlador de juegos (un XBox controller para PC por ejemplo), y una de las entidades que ya posee Microsoft Robotics.

La versión con la que trabajaremos será RDS 2008 R3, que está disponible para descargar de forma gratuita. Además está incluida en las suscripciones MSDN, MSDNAA, DreamSpark y Bizpark.

Tutorial

1. Abrir el entorno de programación visual, [All Programs // Microsoft Robotics Developer Studio 2008 R3 // Visual Programming Language 2008 R3].

2. Una vez abierto deberemos ver el entorno de programación visual, como muestra la siguiente imagen:

image

en el mismo podremos encontrar los paneles de actividades de flujo, servicios disponigles, proyectos, propiedades y el editor de diagramas.

3. En el panel de servicios seleccionamos el servicio [Desktop Joystick] y lo arrastramos al diagrama

image

 

4. Seleccionamos un motor genérico, utilizando el servicio [Generic Differential Drive] y lo arrastramos al diagrama.

image

 

5. A continuación veremos los diferentes eventos que publica el servicio del Joystick y como podremos conectar los mismos con el Generic Drive. En este caso nos suscribiremos al evento [UpdateAxes] y lo conectaremos con la acción [SetDrivePower] del GenericDrive.

image

 

6. En este punto es necesario definir los valores que se pasaran a la potencia del motor derecho e izquierdo.

image

Como un Joystick no posee una definición adecuada para este caso, lo que haremos es realizar un pequeño cálculo para diferenciar los valores.

7. Seleccionamos el check [Edit values directly] y modificamos los valores como muestra la siguiente imagen:

image

Donde el valor de cada motor se obtiene a partir de la diferencia entre los ejes X e Y respectivamente.

8. El siguiente paso consiste en seleccionar un bot para una demo en el entorno de simulación. Para esto seleccionamos el Generic Drive y en el panel de propiedaes seleccionamos en la configuración [Use a manifiest], de esta forma, podremos utilizar un manifiesto con la configuración de alguno de los bots que ya posee Microsoft Robotics.

image

 

9. Utilizando el botón [Import] seleccionamos un bot. La siguiente imagen muestra como para este post utilizaremos un [Lego NXT Tribot].

image

 

10. En este punto ya podremos ejecutar la demo. Primero guardamos el proyecto y a continuación presionamos [F5] para lanzar la demo.

image

 

11. Done !!!

En el siguiente post, como pasar del Lego “virtual” al Lego “real”.

 

Saludos @ Home

El Bruno

   

Buenas,

después de Sevilla, no voy a desarmar la maleta con los robotitos ya que el próximo Lunes 25 habrá una nueva charla del DotNet Club de la Universidad Autónoma de Madrid sobre Robótica con Tecnologías Microsoft.

Obviamente voy a agradecer la invitación de Roberto Luis Bisbé y Sergio Moya Asenjo (ambos MSP – Microsoft Student Partners) y si quieres más datos puedes ver la convocatoria del evento en Facebook y en el la página del grupo Autónoma DotNet Club

Alli nos vemos !!

 

EventoUAMRobotica

 

 

Saludos @ Home

El Bruno

   

imageBuenas a todos, después de la fantástica experiencia de la última mesa redonda de MadNUG, referente al ciclo de vida del desarrollo, vamos a repetir la fórmula, y esta vez con otro tema bastante controvertido también: la arquitectura de las aplicaciones.

En esta charla trataremos de aportar, todos, nuestra visión respecto a los siguientes temas:

  • Aplicaciones multiidioma
  • Aplicaciones multibase de datos
  • WCF y su acercamienta SOA y SOA propiamente dicho
  • Common en aplicaciones n-capas
    • Gestión de errores
    • Logging
    • Trazas
    • Validaciones
    • Seguridad
  • Entity Framework sí no

Además, escuchando algunas de vuestras peticiones, vamos a probar a hacer esta reunión dentro de Madrid, gracias a la colaboración de Aula Vulcan, que nos prestará una de sus salas.

La dirección del Aula Vulcan es:

c/ Francisco Silvela 54 DP, 1ºD
Madrid Madrid 28028
España

Registro http://madriddotnet.spaces.live.com/blog/cns!6453107D41F04C68!376.entry?sa=723216609

Saludos @ Sevilla

El Bruno

   

Fuente: http://geekandpoke.typepad.com/geekandpoke/2009/11/enterprise-architecture-made-easy-part-1.html

Publicado 23/10/2010 21:45 por El Bruno | 2 comment(s)
Archivado en: ,

image

Buenas,

dato rápido para un eventazo de Microsoft Robotics Developer Studio para este viernes 22 en Sevilla, con los amigos de la Escuela Técnica superior de Informatica y los chicos de CartujaDotNet (y la ayuda de Dani y Fran!!!).

En este caso, será también un poco especial ya que, además del típico momento de vergüenza donde las demos con el robot no funcionan como estaba planeado, el amigo Pablo Escribano (@huevafriki) nos mostrará como crear un modelo virtual en el entorno de simulación de Microsoft Robotics a partir de un modelo real, en este caso con el popular R2D2.

Pues ya saben, los esperamos Risa

Titulo

Conquistando el mundo con Microsoft Robotics

Descripción

La última versión de Microsoft Robotics Developer Studio por fin nos acerca un poco más al ansiado objetivo de la conquista global del mundo utilizando robots. En esta charla Bruno nos mostrará cómo podemos aprovechar esta tecnología y comenzar a programar nuestros primeros robots. Además de programación concurrente, orientación a servicios, etc.; veremos una implantación real de esta tecnología en un escenario concreto; como perseguir a tu mascota utilizando LEGO Mindstorms & Microsoft Robotics Studio, controlar un lanzamisiles USB, y todo lo que entre en la maleta.
Además Pablo nos mostrará una implementación real sobre el paso a paso necesario para crear entidades virtuales para el entorno de simulación, a partir de una entidad real, y con uno de los mejores ejemplos posibles: R2D2.

Duración

120 min + break + 45 min

Agenda

- Introducción a Microsoft Robotics

- Microsoft Robotics Simulation Engine

- Microsoft Robotics Visual Programming Language

- Microsoft Robotics Runtime
- Cómo crear una entidad virtual partiendo de un modelo físico

- Otras opciones/ demosvarias

Saludos @ Here

El Bruno

   

Inscripción: https://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032467581&Culture=es-ES

image47dd1de4

Buenas,

hace unos días lo comentaba Jorge, pero voy a hacerme eco de la noticia para luego no olvidarme de los links de las descargas.

Seguramente has notado que cuando despliegas un menú contextual en Visual Studio 2010, el menú se depliega con una increíble flechita de scroll, pero desaprovecha mucho espacio disponible; por ejemplo en la siguiente imagen, el menú bien podría desplegarse hacia abajo y mostrar los elementos que faltan.

clip_image001

 

Pues bien, con los parches que han sacado en estos días, este problema se soluciona (y mira que varios nos hemos quejado !!!), y podemos por fin, ver el menú contextual completo Risa

Para más ejemplos .. pues una imagen.

image

Saludos @ Here

El Bruno

   

Fuente y descarga de los parches: http://blogs.msdn.com/b/visualstudio/archive/2010/10/14/hotfixes-available-for-scrolling-context-menu-problem.aspx

image47dd1de4

Buenas,

con el nuevo modelo de licencias de Team Foundation Server 2010, algunas empresas se han animado a proveer servicios de hosting de TFS2010 en la web. Por ejemplo, DiscountAsp.  En este caso, proponen un sistema de licenciamiento donde es posible acceder a un servicio de TFS2010 casi Basic por $25 por TFS y luego $20 por usuario. Este servicio provee acceso al Source Control, a WorkItem Tracking; pero no posee acceso a informes y al servidor de compilación; eso sí todo montado sobre https, con sus backups diarios, etc.

En lo personal, gracias a mi suscripción MSDN no tengo la necesidad de tener que recurrir a un servicio externo, pero los precios han bajado mucho y son realmente interesantes a tener en cuenta. Vamos que $20 es una pequeña parte de lo que te gastas en una noche de fiestuqui con los amigos … y en este caso es para ayudarnos a tener un ciclo de vida de producto mucho mejor Risa

 

Saludos @ Here

El Bruno

   

Referencia: http://www.discountasp.net/tfs/tfs-hosting-features-pricing.aspx

PD: que quede claro que no tengo ningún tipo de asociación con la gente de DiscountAsp, simplemente intento poner en claro que la opción de “hacer las cosas bien” utilizando TFS tampoco es tan caro.

image47dd1de4

Buenas,

las nuevas herramientas que se incorporan en TFS2010 para la planificación y control de proyectos son realmente muy potentes. Pero claro, para que las mismas funcionen correctamente y podamos explotar la información que se almacena, debemos respetar una serie mínima de pasos en nuestra forma de trabajo. El objetivo de este post no es hablar de este tema, aunque me estoy pensando seriamente en escribir un libro “Gestión de Proyectos for Dummies by a Big Dummy con Visual Studio 2010”, en el que muestre de una forma natural lo poco que sé y mi experiencia con equipos y Visual Studio 2010 y Team Foundation Server 2010.

Pero bueno, volviendo al tema del post, supongamos que comenzamos a crear una serie de historias de usuario, incorporando Acceptance Criteria, con el formato

As a <type of user> I want <some goal> so that <some reason>

Y a continuación, comenzamos a planear la implementación de las mismas, implementando tareas relacionadas. En determinado momento, podremos tener en Visual Studio 2010, una lista similar a la siguiente:

image

En la que podemos ver las User Stories y las Tasks relacionadas.

Aclaración: El objetivo del post es mostrar las capacidades de TFS2010, si no te gusta el ejemplo, los nombres de las tareas, etc –> CTRL+F4 ^^

En este momento, suele ser cuando  necesitamos comenzar a trabajar con nuestro set de WorkItems de una forma más efectiva, y aquí es donde entra en juego la integración con Excel. Si editamos esta lista desde Excel, podremos ver como se respeta la jerarquía de relaciones, y podremos realizar cambios masivos en nuestros elementos de trabajo.

image

En esta vista puedo ser un poco más ambicioso, y agregar columnas para completar horas, usuarios, area / iteraciones, etc.

Un ejemplo puede ser el siguiente, donde simulo una asignación de horas:

image

 

Otra opción interesante en este punto, es que podemos definir más detalle relacionado con la planificación utilizando Microsoft Project. Como muchos ya saben, yo no soy un fanático del Project, pero debo reconocer que es una herramienta muy utilizada y que a menudo nos da muchos disgustos, aunque suele ser por desconocimiento sobre como utilizarla.

Puedo trabajar sobre la Vista de WorkItems, y definir jerarquías y asignaciones de una forma similar a la siguiente :

image

 

Inclusive puedo crear una nueva User Story que agrupe a las demás, con un propósito generar de organizar la vista de proyecto, por ejemplo:

image

 

Si refresco la vista de la hoja Excel, podre ver como automáticamente se incorpora esta nueva jerarquía y como tengo acceso a la misma para poder trabajar con los elementos correspondientes

image

 

Lo mismo desde la vista de una consulta de WorkItems en Visual Studio 2010:

image

 

En este momento, es cuando TFS2010 comienza a ser un excelente mecanismo de tracking, ya que nos permite analizar el desarrollo de la información de una forma coherente y muy organizada. Supongamos que ya ha pasado un tiempo y el desarrollo ya está en marcha, aprovechando las diferentes vistas de Project 2010, podremos ver el estado de las tareas, las desviaciones, etc.

image

 

Inclusive, si ya poseemos una base de trabajo montada y además de nuestras pruebas unitarias comenzamos a trabajar con Microsoft Test Manager como gestor de pruebas,; aprovechando el esquema de trabajo de MTM, podremos ver el resultado de las pruebas asociadas a una consulta de WorkItems, por ejemplo:

image

 

En este punto los informes incorporados en TFS2010, son un excelente ejemplo de integración de informacion. El siguiente informe, nos muestra el estado de cada una de las User Stories con las que hemos trabajado, en lo relacionado a las horas completadas, los resultados de los tests y los bugs reportados para cada User Story.

image

 

Podemos ver además, solo el estado de las horas para cada User Story

image

 

O la evolución de las mismas en cada iteración

image

 

Y hasta aquí he llegado con el post. Mi idea no era atarme a ninguna metodología o forma de trabajo, pero sí mostrar que con un poco de organización, los resultados que podemos obtener explotando la base de datos de Datawarehouse de TFS2010 son muy buenos, y nos brindan una transparencia en el estado del proyecto que solo depende de la calidad con la que estemos trabajando.

Me pienso lo del libro … Risa

 

Saludos @ Home

El Bruno

   

image47dd1de4

Buenas,

ya está dosponible para descargar el Team Foundation Server 2010 Monitoring Management Pack, el mismo provee mencanismos de monitorizacion para Microsoft Team Foundation Server 2010, para la capa de aplicacion, los Team Project Collections, servidores de compilación, etc.

No tengo ningún escenario completo donde probarlo en estos días, pero la verdad es que las opciones de monitorización que presenta son bastante amplias y completas, abarcando desde eventos en el Event Viewer, llamadas  a servicios web de monitorización de TFS2010 y obviamente, los contadores de rendimientos propios de Team Foundation Server 2010.

image

 

Un ejemplo de un diagrama de capa de aplicacion, con servicios propios de TFS2010 puede ser el siguiente, donde es posible ver un TFS Warehouse y el estado de un Team Project Collection, entre otras cosas.

image

 

El esquema de alertas y tareas también está muy completo, y poco más puedo decir ya que aprovechando la potencia de System Center Operation Manager, TFS2010 queda como un producto bastante completo para entornos “serios”.

Saludos @ Home

El Bruno

   

Descarga: http://pinpoint.microsoft.com/en-us/applications/visual-studio-2010-team-foundation-server-monitoring-management-pack-12884907492

image47dd1de4

Buenas,

ayer estaba en Barcelona en una mini sesión de Visual Studio 2010, y me encontré con un escenario curioso relacionado con el motor de compilación de TFS2010. Para comprender el problema, primero repasemos el proceso básico que realiza una Build:

  1. Descarga código fuente
  2. Compila el código fuente
  3. Ejecuta las pruebas unitarias
  4. Realiza el análisis de Cobertura de Código
  5. Despliega el resultado de la build en un directorio de DROP
  6. Almacena toda la información de estos pasos en la base de datos de DataWarehouse

Este es un esquema muy simple de lo que puede realizar una build, pero para este escenario nos sirve.

Cuando estaba ejecutando una build de demostración, con pruebas unitarias y CC habilitado, me encontré con el siguiente mensaje en el Log de la build.

   1: Starting execution...
   2: The test settings file you are using specifies to run tests with code coverage enabled. 
   3: To use this feature, Visual Studio Premium or Visual Studio Ultimate is required. 
   4: The tests will be run without code coverage enabled.

La misma nos indica que si bien el motor de Builds de TFS2010 puede compilar código y ejecutar pruebas unitarias, para la validación de la cobertura de código, es necesario una licencia de Visual Studio 2010 Premium o Ultimate en el ordenador donde se ejecuta el Build Agent.

Me fuí a mi libro para ver el resumen del esquema de licencias y efectivamente, la capacidad de analizar la cobertura de código está incluida en la versión VS2010 Premium y obviamente en la VS2010 Ultimate.

image

 

Asi que, ya sabés: si quieres análisis de cóbertura de código en tus builds, ya vas instalando un Visual Studio 2010 en el Build Agent y podrás ver en el log de la build, una CC bastante mala como la de esta demo: 74%

 

image

 

Gracias a Rafa, Enric y demás por el buen rato ^^

 

Saludos @ Here

El Bruno

   

image47dd1de4

Buenas,

MSBuild posee Out Of The Box una serie de tareas que permiten compilar un proyecto, mostrar mensajes en la consola, etc.; y entre ellas hay varias que son muy útiles para trabajar con archivos. Como uno de los principios que siempre intento seguir es no reinventar la rueda, si en algún momento necesito copiar un archivo, por ejemplo; pues me fijaré si no existe una tarea OOTB para esta acción antes de escribir mi propia Custom Task. El listado completo de tareas OOTB es el siguiente http://msdn.microsoft.com/en-us/library/7z253716.aspx, y dentro del mismo hoy voy a trabajar con alguna de las las siguientes tareas:

  • Copy. Copia uno o más archivos.
  • Delete. Elimina uno o más archivos.
  • MakeDir. Crea uno o más directorios.
  • Move. Mueve uno o mas archivos.
  • RemoveDir. Elimina uno o más directorios.

El siguiente proyecto utiliza estas tareas para trabajar con los binarios que se instalan con Enterprise Library 5.0 en [C:\EntLib50Src\bin\]

   1: <Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003"
   2:          InitialTargets="Target1">
   3:   <PropertyGroup>
   4:     <CreateDir>C:\NewDir\</CreateDir>
   5:   </PropertyGroup>
   6:   <ItemGroup>
   7:     <SourceFiles Include="C:\EntLib50Src\bin\*.*"/>
   8:   </ItemGroup>
   9:   <Target Name="Target1">
  10:     <!-- Crea un directorio en C:\NewDir\-->
  11:     <MakeDir Directories="$(CreateDir)" />
  12:     <!-- Copia los binarios de EntLib -->
  13:     <Copy SourceFiles="@(SourceFiles)"
  14:           DestinationFiles="@(SourceFiles->'$(CreateDir)\%(RecursiveDir)%(Filename)%(Extension)')" />
  15:     <!-- Elimina los archivos xml -->
  16:     <ItemGroup>
  17:       <DeleteFiles Include="$(CreateDir)*.xml"/>
  18:     </ItemGroup>
  19:     <Delete Files="@(DeleteFiles)" />
  20:   </Target>
  21: </Project>

Si bien es auto explicativbo (ver los comentarios), este proyecto realiza lo siguiente:

  • Crea un nuevo directorio (línea 11)
  • Copia todos los archivos de EntLib al nuevo directorio (líneas 13 y 14)
  • Elimina los archivos con extensión *.xml (línea 19)

Si vemos el directorio original y el nuevo directorio creado, podremos ver la diferencia entre los mismos.

image

Saludos @ Here

El Bruno

   

image47dd1de4

Buenas,

el amigo Brian Harry nos ofrece la oportunidad de participar en una encuesta sobre Visual Studio 2010 de cara a la preparación del Service Pack 1 del mismo. Vamos que entre una cosa y otra, ya han pasado varios meses desde el lanzamiento de Visual Studio 2010 y existen muchos pequeños fixes y nuevas funcionalidades que se pueden incorporar en el Service Pack 1.

La encuesta se puede acceder desde http://go.microsoft.com/fwlink/?LinkId=203459 y la verdad es que es mucho mas simple que las que suelen crear los del equipo de producto.

 

Saludos @ Here

El Bruno

   

Fuente: http://blogs.msdn.com/b/bharry/archive/2010/10/07/visual-studio-2010-survey.aspx

Publicado 8/10/2010 10:22 por El Bruno | con no comments

image47dd1de4

Buenas,

los amigos de Clarius han liberado una extensión para Visual Studio 2010 que es realmente interesante, ya que permite agregar referencias a un proyecto de forma inteligente en base al código que vamos escribiendo (más fluido imposible !!!)

Por ejemplo, si creamos un proyecto de tipo Class Library y escribimos el siguiente código

   1: namespace ClassLibrary1
   2: {
   3:     public class Class1
   4:     {
   5:         Web
   6:     }
   7: }

 

Si desplegamos el smart part, en la línea 5, veremos que entre las opciones tenemos una nueva que nos permite agregar dinámicamente la referencia Microsoft.Expression.Interop.WebDesigner a nuestro proyecto.

image

 

Si además, agregamos una clase que exista en varias versiones de un mismo ensamblado, TaskLoggingHelper de MSBuild, por ejemplo, podremos ver como se nos ofrecen las diferentes versiones del mismo.

image

 

Me parece bastante útil … y a ver que tal le va en el día a día a la extensión Risa

 

Saludos @ Here

El Bruno

   

Descarga: http://visualstudiogallery.msdn.microsoft.com/en-us/dc06b54c-b6c4-4cf5-8203-a09c6979e881

 image47dd1de4

Buenas,

cuando creas una Custom Task para MSBuild, es probable que en algún momento te tientes de utilizar otros ensamblados dentro de la misma. Esto que se soluciona de una forma simple en aplicaciones .Net, en MSBuild puede ser un tanto complicado ya que el control que tenemos sobre el host de ejecución (MSBuild) no es bastante pobre.

Supongamos el siguiente escenario, donde una tarea llamada TaskFour utiliza un componente para realizar una suma (líneas 13 y 14):

   1: using Microsoft.Build.Utilities;
   2: using Microsoft.Build.Framework;
   3: namespace ElBruno.MsBuild
   4: {
   5:     public class TaskFour : Task
   6:     {
   7:         [Output]
   8:         public int AddResult { get; set; }
   9:         public int FirstArgument { get; set; }
  10:         public int SecondArgument { get; set; }
  11:         public override bool Execute()
  12:         {
  13:             var m = new MsBuildSample.Math();
  14:             AddResult = m.Add(FirstArgument, SecondArgument);
  15:             return true;
  16:         }
  17:     }
  18: }

 

Si luego incluimos esta tarea en un proyecto de MSBuild (línes 3 y 4), e invocamos a la misma (líneas 6 y 8)

   1: <Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003"
   2:          InitialTargets="Target1">
   3:   <UsingTask TaskName="ElBruno.MsBuild.TaskFour"
   4:              AssemblyFile="c:\srcBruno\Agile01\MsBuild Tests\Sample 04\bin\Debug\ElBruno.MsBuild.dll" />
   5:   <Target Name="Target1">
   6:     <TaskFour FirstArgument="2" SecondArgument="2">
   7:       <Output TaskParameter="AddResult" PropertyName="AddResult" />
   8:     </TaskFour>
   9:     <Message Text="Resultado: $(AddResult)"></Message>
  10:   </Target>
  11: </Project>

podemos encontrarnos con el siguiente error en tiempo de ejecución:

image

donde básicamente podemos ver que la CustomTask FourTask no encuentra el ensamblado MsBuildSample.

En este caso, en el directorio que se utiliza para importar la tarea (líneas 3 y 4), vemos que no está el ensamblado MsBuildSample.

image

Si copiamos el ensamblado en la misma ruta

image

 

y ejecutamos el proyecto, el mismo ya ejecuta correctamente.

image

 

Pues bien, en este caso la recomendación es intentar tener en un único directorio todos los ensamblados de las Custom Tasks y de las dependencias de los mismos para los proyectos de MSBuild. En TFS esto cambia un poco … pero esto es para otro post.

 

Saludos @ Here

El Bruno

   

image47dd1de4

Buenas,

nuestros amigos del pinta y colorea están de fiesta y momentos Jappy Jappy Joy Joy:

Microsoft ha liberado un parche que permite compilar correctamente los proyectos y soluciones de Biztalk 2009 con Visual Studio 2008, cuando se trabaja en un entorno con Team Foundation Server 2010 y Team Build 2010.

El mismo se puede descargar desde http://support.microsoft.com/kb/2406405/en-us/

 

Saludos @ Here

El Bruno

   

image47dd1de4

Buenas,

ayer escribí un post donde comenté un escenario donde al intentar ejecutar pruebas unitarias para Custom Tasks de MSBuild, nos encontrábamos con que la instancia de la propiedad Log (TaskLoggingHelper) no estaba inicializada y no podíamos continuar con nuestras pruebas.

Para solucionar este escenario, lo que haremos es modificar un poco el comportamiento de nuestra Custom Task, para poder definir que tipo de TaskLoggingHelper utilizará la clase. Para esto, creamos 2 constructores donde podemos recibir la instancia específica que utilizaremos para las trazas.

En el constructor por defecto (línea 8), utilizaremos el Log por defecto de MSBuild, y en otro constructor (línea 12) recibimos una instancia para las trazas. Luego utilizamos _log (línea 7) para realizar las trazas.

   1: using Microsoft.Build.Utilities;
   2: using Microsoft.Build.Framework;
   3: namespace ElBruno.MsBuild
   4: {
   5:     public class MyThirdTask : Task
   6:     {
   7:         private TaskLoggingHelper _log;
   8:         public MyThirdTask()
   9:         {
  10:             _log = Log;
  11:         }
  12:         public MyThirdTask(TaskLoggingHelper log)
  13:         {
  14:             _log = log;
  15:         }
  16:  
  17:         public string InputData { get; set; }
  18:         [Output]
  19:         public string OutputData { get; set; }
  20:         public override bool Execute()
  21:         {
  22:             var ret = true;
  23:             OutputData = string.Format(@"{0} Input Data Procesada", InputData);
  24:             _log.LogMessage(OutputData);
  25:             return ret;
  26:         }
  27:     }
  28: }

Luego, en la prueba unitaria, utilizamos Moles para crear un Mock para el TaskLoggingHelper y hacemos que el mismo, en el momento de ejecutar la función LogMessage(), escriba en el panel de Output de Visual Studio.

   1: [TestMethod()]
   2: [HostType("Moles")]
   3: public void TestDemoPost()
   4: {
   5:   var m = new MTaskLoggingHelper();
   6:   m.BehaveAsDefaultValue();
   7:   m.LogMessageStringObjectArray = 
   8:     (log, parameters) =>
   9:     {
  10:       Debug.WriteLine(log);
  11:     };
  12:     var target = new MyThirdTask(m) { InputData = "valentino" };
  13:     target.Execute();
  14:     Assert.AreEqual(target.OutputData, string.Format(@"{0} Input Data Procesada", target.InputData));
  15: }

Pues en pocas líneas, ya tenemos la capacidad de poder crear pruebas unitarias para nuestras tareas personalizadas y de esta forma, asegurar calidad y funcionamiento en las mismas.

Ahh y agradecer al Edu que me ha dado una mano, para terminar el ejemplo :D

 

Saludos @ Here

El Bruno

   

PD: ya se que <Mockear> no existe como verbo … asi que  :P

Más artículos Página siguiente >