Archivo de la categoria 'MSBuild'

Actualizando los archivos AssemblyInfo usando las Southworks SDC tasks

English Version

Johnny and Ezequiel han publicado en sus Blogs acerca de las Southworks SDC Tasks que hemos publicado dos semanas atr谩s en Google Code. Este projecto es un set de tasks para MSBuild tasks que construimos mientras madurabamos nuestro proceso de build.

Durante este tiempo voy a intentar darles una gu铆a sobre estas tasks que hemos desarrollado por medio de un ejemplo de cada una de ellas.

En este post van a encontrar de que forma se pueden actualizar los archivos AssemblyInfo con informaci贸n de la empresa utilizando la task UpdateAssemblyinfo facilmente.

Esta task es basntate simple, entonces, vamos a crear un simple projecto de MSBuild (.proj) para demostrar como funciona.

Referenciando el assembly SDC en el proyecto de MSBuild

El primer paso es a帽adir la referencia para esta task en particular configurando los nodos AssemblyFile y TaskName con los siguientes valores:

<Project DefaultTargets="UpdateAssemblyInfos" 
         xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <UsingTask AssemblyFile="d:\test\Southworks.Sdc.Tasks.dll"
             TaskName="UpdateAssemblyInfo"/> 
</Project>

Hay que tener en cuenta que el nodo DefaultTargets indica cual va a ser el target que va a ejecutarse primero, m谩s adelante voy a incluir este target.

Definiendo que files van a ser actualizados

El siguiente paso es indentificar y configurar cu谩les van a ser los archivos que modificar谩 nuestra task y donde se encuentran. Para esto vamos a crear un ItemGroup. Si quer茅s conocer m谩s acerca de incluir y/o excluir items mira este link http://msdn.microsoft.com/en-us/library/646dk05y.aspx.

<Project DefaultTargets="UpdateAssemblyInfos"
         xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
 
  <UsingTask AssemblyFile="d:\test\Southworks.Sdc.Tasks.dll"
             TaskName="UpdateAssemblyInfo"/>  
  <ItemGroup>
    <AssemblyInfos Include="d:\test\**\AssemblyInfo.cs"/>
  </ItemGroup>
 
</Project>

Configurando el target UpdateAssemblyinfo

Por 煤ltimo debemos crear y configurar el nuevo target especificando la informaci贸n que va a ser reemplazada en los archivos que hemos configurado en el paso anterior.

<Project DefaultTargets="UpdateAssemblyInfos" 
         xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
 
  <UsingTask AssemblyFile="d:\test\Southworks.Sdc.Tasks.dll"
             TaskName="UpdateAssemblyInfo"/>
  
  <ItemGroup>
    <AssemblyInfos Include="d:\test\**\AssemblyInfo.cs"/>
  </ItemGroup>
 
  <Target Name="UpdateAssemblyInfos">
    
    <UpdateAssemblyinfo Include="@(AssemblyInfos)"
                      AssemblyCopyright="Southworks (r) copyright"
                      AssemblyCompany="Southworks"
                      AssemblyProduct="Sample product " />
  </Target>
  
</Project>

Verificaci贸n

Para comprobar que todo esta funcionando, podemos ejecutar el projecto con MSBuild como se muestra en la siguiente imagen:

image

Por 煤ltimo, abriendo alguno de los  AssemblyInfo.cs incluidos y veremos como se ha actualizado:

image

Gracias, y sigan atentos!

Utilizando wildcards de la forma \**\ en CruiseControl.Net

English Version

Esta 煤ltima semana estuvimos trabajando en nuestro Build Server utilizando CruiseControl.Net para permitir la posibilidad de ejecutar m煤ltiples Test / Code Coverage tasks para dos o m谩s soluciones.

Una vez que tenemos configurado el MSBuild Project para ejecutar, por ejemplo, un set de dos o m谩s RunTests / RunCoverage tasks, necesitamos fusionar estos resultados al log de MSBuild luego de su ejecuci贸n.

Entonces, nuestro primer intento fue modificar el archivo ccnet.config para poder fusionar los archivos generados por estas tasks usando el mismo patr贸n utilizado por MSBuild, quiero decir, usando /**/, algo como esto:

<merge>
    <files>
        <file>D:\srv\ccnet\logs\project\**\*.trx</file>
        <file>D:\srv\ccnet\logs\project\**\*.cvg</file>
    </files>
</merge>

En ese momento nos dimos cuenta, que CruiseControl.Net no posee esta funcionalidad, 煤nicamente nos permite la utilizaci贸n de Wildcards de la forma convencional, por ejemplo D:\srv\ccnet\logs\project\theProject\*.trx, y como el c贸digo fuente de CruiseControl.Net est谩 disponible, me puse a escribir algunas l铆neas de c贸digo para modificar el assembly ThoughtWorks.CruiseControl.Core para que nos permita utilizar /**/ como lo hace MSBuild.

En este post van a encontrar el c贸digo fuente de un Spike que escrib铆 con una serie de test para implementar esta funcionalidad y el c贸digo fuente del archivo WildCardPath.cs actualizado que forma parte del Core de proyecto CruiseControl.Net.

  • Solucion Spike con unit tests [Download]
  • El archivo donde se encuentra la clase WildCardPath del assembly Core de CruiseControl.Net [Download]

Una vez actualizado el proyecto Core con esta nueva implementaci贸n, tendr铆an que seguir los siguientes pasos para dejarlo con esta nueva funcionalidad

  1. Compliar el Core Project
  2. Parar el servicio de CruiseControl.Net (ccservice)
  3. Reemplazar el assembly ThoughtWorks.CruiseControl.Core por el Nuevo
  4. Levantar nuevamente el servicio

Y eso es todo, a usar wildcards como en MSBuild :)

Microsoft Source Analysis for C# 4.2 publicado

English Version

Microsoft ha publicado una gran herramienta llamada Microsoft Source Analysis for C#, conocida tambi茅n como StyleCop.

Esta herramienta nos permite controlar y mejorar la calidad del c贸digo que escribimos. Esta totalmente integrada con Visual Studio, lo que quiere decir que con un simple click derecho en nuestra soluci贸n, proyecto o file, podemos comprobar nuestro c贸digo teniendo en cuenta las mejores pr谩cticas definidas en una serie de reglas como se muestra a continuaci贸n.

Pueden encontrar una descripci贸n mas detallada (ingl茅s) en el siguiente post: Announcing the release of Microsoft Source Analysis for C# y descargarse el instalador desde aqu铆.

Otra de las opciones que nos brinda esta herramienta, es la posibilidad de personalizar qu茅 reglas van a ser ejecutadas, utilizando la configuraci贸n que viene integrada en la UI.

Por 煤ltimo, otra punto importante, es que nos permite integrar este chequeo en nuestro proceso de build por medio de MSBuild. Les recomiendo este blog post (ingl茅s) de Jason Allor’s en la p谩gina de Source Analysis donde 茅l explica c贸mo hacerlo.

Y otro post intereando del MSBuild Team Blog , donde anuncian este release.

Disfrutenlo y diganle adios a los documentos con est谩ndares de c贸digo :)