[TEAMBUILD2010] HowTo: Perform code analysis with StyleCop in Team Build 2010

image47dd1de4

Good,

After commenting on the launch of the first version of tfs build extensions to Team build 2010, because today is detailed step by step to one of the custom have released, join a Team Build definition. In this case, an analysis of code withStyleCop after compiling a project or solution.

Tutorial

1. Download and install StyleCop, from its CodePlexproject site: http://stylecop.codeplex.com/. In addition, download and unzip the current version of tfs build extensions from its CodePlexsite: http://tfsbuildextensions.codeplex.com/

2. For this example we will use a project of type class library with a single class with the following code:

   1: using System;

 

   2: namespace ElBruno.StyleCopBuild.Demo

 

   3: {

 

   4:     public class Valentino

 

   5:     {

 

   6:         public Valentino(int edad)

 

   7:         {

 

   8:             if(edad > 100)

 

   9:             {

 

  10:

 

  11:                 throw  new ArgumentException("la edad no puede ser mayor que 100", "edad");

 

  12:             }

 

  13:         }

 

  14:     }

 

  15: }

 

With these few lines of code we can already launch a couple of warnings of StyleCop. If we make an analysis of the project, we will find the following:

image

3 Protect this code in our server Team Foundation Server 2010 and create a definition of Team Build 2010 to compile and validate this project. Obviously, the expected result is the following:

image

a Build with State success, which has been compiled and tests have been executed correctly.

4. The following a little organise the directory structure in order thus to have assembled required for custom definition of Team Build to implement analysis of code with StyleCoprules. For this, I created a structure with several folders in the SCC:

  • build
    Own assembled used during the build process will be stored in this folder. For example, the dlls that ship with tfs build extensions. Also in this folder copy a template from Team Build (for example from$/BuildProcessTemplates/DefaultTemplate.xaml) and on it will make the changes in the build process.
  • src
    This folder stores the code source of the solution

image

5 Modify the definition of the Build Controller, use the directory configured in the previous step as a repository of custom assemblies for the execution of the Build.

image

Note: If you want to see a full example on this topic, this post can help > http://elbruno.com/2011/03/22/teambuild2010-howto-crear-una-custom-activity-para-team-build-2010/

6. Below we create a new project of type Class Library in Visual Studio 2010, the location of the directory templates of Builds with the assembled. This project you will use to edit build definition.

7 Remove the class (Class1.cs) project and add a reference to the xaml file using an Add As Link to the project. The project is created in its own folder in the SCC, so we will have to upload a couple of levels until you reach theBuildTemplateWithStyleCop.xamlfile.

image

8 Add the references to all the assembled in the Build folder, which are those who have downloaded from tfs build extensions.

image

9 Edit the BuildTemplateWithStyleCop.xaml file and in the ToolBox of tools, add a new section called [tfs build extensions]. Within the same add the activities of the Assembly that we have stored in the build directory. The section should be similar to the following:

image

10 Access to the compilation of each project and activity [Run MSBuild for Project] Add a new sequence which we call [Run StyleCop Analysis]. Add the following variables with the scope of the sequence in the sequence

  • StyleCopFiles – iEmumerable < string >
  • StyleCopSettingsFile – string
  • StyleCopResults – bool
  • StyleCopViolations – int32

11. In the sequence we add 2 activities of the type [WriteBuildMessage] to indicate the beginning and the end of the process of analysis with StyleCop. We call them “start stylecop analysis” and “finish stylecop analysis“, and show you a message with the same name of each activity.

image

12 Of the first message, add an activity of the type [FindMatchingFile] to identify the .cs files on which the analysis will be made. In the same configure:

  • Display Name > Find CS files for source analysis
  • Result > StyleCopFiles
  • (“MatchPattern > String.Format(“{0}\**\*.cs “, BuildDirectory)

image

13. Then add an activity of type [Assign] to locate the stylecop settings file. In the same configure:

  • Display Name > Assign StyleCop Settings File
  • To > StyleCopSettingsFile
  • (“Value > String.Format(“{0}\Settings.StyleCop “, localProject.Substring (0, localProject.LastIndexOf(“\”)))

image

14. Then we add an activity of the type [WriteBuildMessage]. In the same configure:

  • Display Name > Start StyleCop Analysis using settings file
  • Importance > Microsoft.TeamFoundation.Build.Client.BuildMessageImportance.High
  • Message > string.format(“about_to_run_stylecop_with_[{0}]“,_stylecopsettingsfile)

15. Then add an activity of the type [StyleCop] is that performed the analysis of code. In the same configure:

  • Display Name > Run StyleCop Analysis
  • SettingsFile > StyleCopSettingsFile
  • SourceFiles > StyleCopFiles.ToArray)
  • Succeeded > StyleCopResults
  • TreatViolationsErrorASWarnings > True
  • ViolationCount > StyleCopViolations

An important detail is True the property [TreatViolationsErrorASWarnings] so that errors are in the process of code analysis are displayed in the log as Warnings.

16. Then add an activity of the type [WriteBuildMessage]. In the same configure:

  • Name display > Display StyleCop Analysis Results
  • Importance > Microsoft.TeamFoundation.Build.Client.BuildMessageImportance.High
  • Message > String.Format(“StyleCop_Successed:{0}_with_{1}_violations”,_StyleCopResults,_StyleCopViolations)

17. We protect the files modified in TFS. The process should be similar to the following:

image

18 We changed the build definition that you use the process that we have changed in the previous steps.

image

19 Launched the build, and we can already see how the execution of code with StyleCopanalysis process is included in the result of the same.

image

 

To take into account

Yes by the way, when Spears a new build you find yourself with the following error:

Error: Could not load file or assembly ‘ Microsoft.StyleCop, Version = 4 4 0 14, Culture = neutral, PublicKeyToken = 31bf3856ad364e35′ or one of its dependencies. The system cannot find the file specified… Stack Trace: at TfsBuildExtensions.Activities.CodeQuality.StyleCop.Scan (at TfsBuildExtensions.Activities.BaseCodeActivity.Execute(CodeActivityContext_context)) in D:\Projects\teambuild2010contrib\MAIN\Source\Common\BaseCodeActivity.cs:line 66.
Could not load file or assembly ‘ Microsoft.StyleCop, Version = 4 4 0 14, Culture = neutral, PublicKeyToken = 31bf3856ad364e35′ or one of its dependencies. The system cannot find the file specified.

image

It is very likely not have installed the correct version of StyleCop. The version that you download and install ishttp://stylecop.codeplex.com/releases/view/44839

Another option is to not be chargeable the StyleCop assembled for the execution of the build, in this case you should copy the Assembly from the StyleCop installation path [C:\Program Files (x 86) \Microsoft StyleCop 4.4.0.14] and add them into the Build directory.

image

 

Puedes bajar el ejemplo completo desde:

https://skydrive.live.com/embedicon.aspx/Code%20Samples/2011%2007%2010%20ElBruno.StyleCop.TeamBuild.zip?cid=bef06dffdb192125&sc=documents

 

Saludos @ Home

El Bruno

   

Resources:

[TEAMBUILD2010] HowTo: Realizar análisis de código con StyleCop en Team Build 2010

image47dd1de4

Buenas,

después de comentar el lanzamiento de la primera versión de las Tfs Build Extensions para Team build 2010, pues hoy toca detallar el paso a paso para incorporar una de las actividades custom que se han liberado, a una definición de Team Build. En este caso, realizar un análisis de código con StyleCop luego de compilar un proyecto o solución.

Tutorial

1. Descargar e instalar StyleCop, desde su site de proyecto en CodePlex: http://stylecop.codeplex.com/. Además descargar y descomprimir la versión actual de Tfs Build Extensions desde su site de CodePlex: http://tfsbuildextensions.codeplex.com/

2. Para este ejemplo, utilizaremos un proyecto del tipo biblioteca de clases, con una única clase con el siguiente código:

   1: using System;

   2: namespace ElBruno.StyleCopBuild.Demo

   3: {

   4:     public class Valentino

   5:     {

   6:         public Valentino(int edad)

   7:         {

   8:             if(edad > 100)

   9:             {

  10:  

  11:                 throw  new ArgumentException("la edad no puede ser mayor que 100", "edad");

  12:             }

  13:         }

  14:     }

  15: }

Con estas pocas líneas de código ya podemos lanzar un par de warnings de StyleCop. Si realizamos un análisis del proyecto, nos encontraremos con lo siguiente:

image

3. Protegemos este código en nuestro servidor Team Foundation Server 2010 y creamos una definición de Team Build 2010 para compilar y validar este proyecto. Obviamente, el resultado esperado es el siguiente:

image

una Build con estado Sucess, donde se ha compilado y se han ejecutado las pruebas de forma correcta.

4. A continuación organizaremos un poco la estructura de directorios para de esta forma, poder tener los ensamblados requeridos para la definición personalizada de Team Build que se encargue de aplicar las reglas de análisis de código con StyleCop. Para esto, he creado dentro del SCC una estructura con varias carpetas:

  • build
    En este folder se almacenarán los ensamblados propios que se utilizan durante el proceso de build. Por ejemplo, las dlls que se distribuyen con Tfs Build Extensions. Además en esta carpeta copiaremos una template de Team Build (por ejemplo desde $/BuildProcessTemplates/DefaultTemplate.xaml) y sobre la misma realizaremos las modificaciones en el proceso de build.
  • src
    En este folder se almacena el código fuente de la solución

image

5. Modificaremos la definición del Build Controller, para que utilice el directorio que configuramos en el paso anterior como repositorio de custom assemblies para la ejecución de la Build.

image

Nota: si quieres ver un ejemplo completo sobre este tema, este post puede ayudar > http://elbruno.com/2011/03/22/teambuild2010-howto-crear-una-custom-activity-para-team-build-2010/

6. A continuación creamos un nuevo proyecto de tipo Class Library en Visual Studio 2010, en la ubicación del directorio con los ensamblados y templates de Builds. Este proyecto lo utilizaremos para poder editar la definición de build.

7. Eliminamos la clase (Class1.cs) del proyecto y agregamos una referencia al fichero xaml utilizando un Add As Link al proyecto. El proyecto se crea en su propia carpeta dentro del SCC, con lo que tendremos que subir un par de niveles hasta llegar al fichero BuildTemplateWithStyleCop.xaml.

image

8. Agregamos las referencias a todos los ensamblados que están en el folder Build, que son los que hemos descargado desde Tfs Build Extensions.

image

9. Editamos el archivo BuildTemplateWithStyleCop.xaml y en la ToolBox de herramientas, agregamos una nueva sección llamada [Tfs Build Extensions]. Dentro de la misma agregamos las actividades  de los ensamblados que hemos almacenado en el directorio build. La sección debería quedar similar a la siguiente:

image

10. Accedemos hasta la compilación de cada proyecto y luego de la actividad [Run MSBuild for Project] agregamos una nueva secuencia a la que llamaremos [Run StyleCop Analysis]. En la secuencia agregamos las siguientes variables, con el scope propio de la secuencia

  • StyleCopFiles – iEmumerable<string>
  • StyleCopSettingsFile – string
  • StyleCopResults – bool
  • StyleCopViolations – int32

11. Dentro de la secuencia agregamos 2 actividades del tipo [WriteBuildMessage] para indicar el inicio y el fin del proceso de análisis con StyleCop. Llamaremos a las mismas “Start StyleCop Analysis” y “Finish StyleCop Analysis”, y mostraremos un mensaje con el mismo nombre de cada actividad.

image

12. Luego del primer mensaje, agregamos una actividad del tipo [FindMatchingFile] para identificar los archivos .cs sobre los que se realizará el análisis. En la misma configuramos:

  • Display Name > Find CS files for source analysis
  • Result > StyleCopFiles
  • MatchPattern > String.Format(“{0}\**\*.cs”, BuildDirectory)

image

13. A continuación agregamos una actividad del tipo [Assign] para ubicar el archivo de settings de stylecop. En la misma configuramos:

  • Display Name > Assign StyleCop Settings File
  • To > StyleCopSettingsFile
  • Value > String.Format(“{0}\Settings.StyleCop”, localProject.Substring(0, localProject.LastIndexOf(“\”)))

image

14. A continuación agregamos una actividad del tipo [WriteBuildMessage]. En la misma configuramos:

  • Display Name > Start StyleCop Analysis using settings file
  • Importance > Microsoft.TeamFoundation.Build.Client.BuildMessageImportance.High
  • Message > String.Format(“About to run Stylecop with [{0}]“, StyleCopSettingsFile)

15. A continuación agregamos una actividad del tipo [StyleCop] que es la que realiza el análisis de código. En la misma configuramos:

  • Display Name > Run StyleCop Analysis
  • SettingsFile > StyleCopSettingsFile
  • SourceFiles > StyleCopFiles.ToArray()
  • Succeeded > StyleCopResults
  • TreatViolationsErrorASWarnings > True 
  • ViolationCount > StyleCopViolations

Un detalle importante es poner en True la propiedad [TreatViolationsErrorASWarnings] para que los errores que se encuentren en el proceso de análisis de código se muestren en el log como Warnings.

16. A continuación agregamos una actividad del tipo [WriteBuildMessage]. En la misma configuramos:

  • Display Name > Display StyleCop Analysis Results
  • Importance > Microsoft.TeamFoundation.Build.Client.BuildMessageImportance.High
  • Message > String.Format(“StyleCop Successed:{0} with {1} violations”, StyleCopResults, StyleCopViolations)

17. Protegemos el archivos modificado en TFS. El proceso debería quedar similar al siguiente:

image

18. Cambiamos la definición de la build para que utilice el proceso que hemos modificado en los pasos anteriores.

image

19. Lanzamos la build y ya podremos ver como en el resultado de la misma se incluye la ejecución del proceso de análisis de código con StyleCop.

image

 

A tener en cuenta

Si por el camino, cuando lanzas una nueva build te encuentras con el siguiente error:

Error: Could not load file or assembly ‘Microsoft.StyleCop, Version=4.4.0.14, Culture=neutral, PublicKeyToken=31bf3856ad364e35′ or one of its dependencies. The system cannot find the file specified.. Stack Trace:    at TfsBuildExtensions.Activities.CodeQuality.StyleCop.Scan()    at TfsBuildExtensions.Activities.BaseCodeActivity.Execute(CodeActivityContext context) in D:\Projects\teambuild2010contrib\MAIN\Source\Common\BaseCodeActivity.cs:line 66.
Could not load file or assembly ‘Microsoft.StyleCop, Version=4.4.0.14, Culture=neutral, PublicKeyToken=31bf3856ad364e35′ or one of its dependencies. The system cannot find the file specified.

image

Es muy probable que no tengas instalada la versión correcta de StyleCop. La versión que debes descargar e instalar es http://stylecop.codeplex.com/releases/view/44839

Otra opción es que no se puedan cargar los ensamblados de StyleCop para la ejecución de la build, en este caso deberías copiar los ensamblados desde el path de instalación de StyleCop [C:\Program Files (x86)\Microsoft StyleCop 4.4.0.14] y agregarlos en el directorio Build.

image

 

Puedes bajar el ejemplo completo desde:

https://skydrive.live.com/embedicon.aspx/Code%20Samples/2011%2007%2010%20ElBruno.StyleCop.TeamBuild.zip?cid=bef06dffdb192125&sc=documents

 

Saludos @ Home

El Bruno

   

Resources: