2012-09-10 17 views
7

Estoy intentando establecer/anular algunas configuraciones en nuestra instalación TEST de TFS con respecto a forzar el análisis de código y configuración asignada durante el proceso de compilación (independientemente de la configuración del archivo de proyecto)Configuración de configuración de análisis de código en TFSBuild.proj

utilizamos actualmente en nuestra instalación de prueba TFS:

  • Visual Studio 2012 último en nuestras máquinas de desarrollador y de creación de servidores
  • Ha TFS 2012 instalado en un servidor (aplicación y la capa de datos)
  • Tener el servicio de compilación TFS 2012 (controlador y agente) instalado en otro servidor

Podemos compilar ejemplos de proyectos .net 4.5 (bibliotecas de clases (DLL), aplicaciones web, etc.) como se esperaba. Esto solo tiene que ver con anular las configuraciones asociadas de Análisis de Código (con suerte).

Escenario 1 - En nuestras aplicaciones de muestra en nuestras máquinas reveladoras cuando selecciona la configuración del proyecto (clic derecho -> propiedades en el explorador de soluciones), vaya a la pestaña Análisis de código si enciendo el "Habilitar análisis de código en la compilación" y seleccione un conjunto de reglas del menú desplegable que se ejecuta como se exepto, por lo tanto, generará algunas advertencias. Esta técnica agrega <RunCodeAnalysis>false</RunCodeAnalysis> al archivo * .csproj si se abre en el bloc de notas. Si la compilación se ejecuta para compilar el proyecto/solución de muestra, entonces el Análisis de código se realiza como se esperaba. NO quiero hacer esto en cada proyecto porque un desarrollador podría desactivarlo (aunque estoy buscando tener políticas de check-in y/o checkins privados/cerrados para forzar esto de todos modos).

Escenario 2: puedo deshabilitar la casilla de verificación "Habilitar análisis de código en compilación" y forzar el análisis de código en nuestro archivo TFSBuild.proj (usaremos el upgradeitemplate.xaml predeterminado como definición de proceso porque vamos a actualizar desde TFS 2008 en nuestra instalación VIVO TFS) por tener:

<RunCodeAnalysis>Always</RunCodeAnalysis>

esto funciona y así es como vamos a la fuerza (lecciones aprendidas sigue siendo :-)) Análisis de código en nuestro construcciones.

El problema se presenta cuando se configuran otras configuraciones de análisis de código. Por ejemplo, qué conjunto de reglas predeterminadas aplicar/usar o tratar las advertencias de CA como errores. Algunas de estas configuraciones se pueden establecer en VS o en todas ellas editando * .csproj en el bloc de notas. Si edito * .csproj, estos valores se utilizan en la compilación como se espera (y también localmente en la máquina del desarrollador). Esto no es ideal ya que quiero hacerlo centralmente en TFSBuild.proj sin tener que editar cada archivo de proyecto. Creo que puedo usar la configuración, como en mi archivo TFSBuild.proj:

<PropertyGroup> 
    <RunCodeAnalysis>Always</RunCodeAnalysis> 
    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet> 
    <CodeAnalysisTreatWarningsAsErrors>true</CodeAnalysisTreatWarningsAsErrors> 
</PropertyGroup> 

Pero ellos no parecen funcionar o Los pongo en el lugar equivocado? ¿Cómo los arreglo/uso correctamente?

FYI construyo mis soluciones en TFSBuild.proj por:

<Project DefaultTargets="DesktopBuild" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="4.0"> 

    <Import Project="$(MSBuildExtensionsPath)\Microsoft\VisualStudio\TeamBuild\Microsoft.TeamFoundation.Build.targets" /> 
      <ItemGroup> 
      <SolutionToBuild Include="/some folder/some solution.sln" /> 
      <ConfigurationToBuild Include="Debug|Any CPU"> 
       <FlavorToBuild>Debug</FlavorToBuild> 
       <PlatformToBuild>Any CPU</PlatformToBuild> 
      </ConfigurationToBuild> 
      </ItemGroup> 
</Project> 

En el servidor de compilación he encontrado referencia al archivo de destino para el análisis de código en C: \ Archivos de programa (x86) \ MSBuild \ Microsoft \ VisualStudio \ v11.0 \ CodeAnalysis pero no quiero cambiar el comportamiento predeterminado en el servidor de compilación (aunque funciona cuando lo hago). La condición, por ejemplo, para CodeAnalysisTreatWarningsAsErrors debe ser evaluada como falsa. Es como que mis valores no se leen desde TFSBuild.proj, sino que son del archivo .csproj.

Cualquier pregunta no dude en preguntar y gracias de antemano

Respuesta

1

Recuerdo haber tenido un problema similar - pero no tener el tiempo para investigar, trabajé alrededor de ella llamando FxCop directamente a través de la tarea Exec. Le daré lo más destacado, omitiendo la especificación de algunas propiedades, espero que los nombres sean claros.

I creó un ItemGroup de las DLL de salida, FilesToAnalyze, y se alimenta a FxCop de una manera similar a:

<PropertyGroup> 
     <FxCopErrorLinePattern>: error</FxCopErrorLinePattern> 
     <FxCopCommand>"$(FxCopPath)" /gac /rule:"$(FxCopRules)" /ruleset:="$(FxCopRuleSet)" @(FilesToAnalyze->'/file:"%(identity)"', ' ') /out:$(FullFxCopLog) /console | Find "$(FxCopErrorLinePattern)" > "$(FxCopLogFile)"</FxCopCommand> 
</PropertyGroup>  

<Exec Command="$(FxCopCommand)" 
     ContinueOnError="true"> 
    <Output TaskParameter="ExitCode" PropertyName="FxCopExitCode"/> 
</Exec> 

<ReadLinesFromFile File="$(FxCopLogFile)"> 
    <Output TaskParameter="Lines" ItemName="AllErrorLines"/> 
</ReadLinesFromFile> 

entonces podría determinar el número de errores en la salida usando una tarea extensionpack:

<MSBuild.ExtensionPack.Framework.MsBuildHelper TaskAction="GetItemCount" InputItems1="@(AllErrorLines)"> 
    <Output TaskParameter="ItemCount" PropertyName="FxErrorCount"/> 
</MSBuild.ExtensionPack.Framework.MsBuildHelper> 

y crear un paso defecto de construcción para cada error:

<BuildStep TeamFoundationServerUrl="$(TeamFoundationServerUrl)" 
     BuildUri="$(BuildUri)" 
     Id="$(FxCopStep)" 
     Status="Failed" 
     Message="FxCop Failed: $(FxErrorCount) errors."/> 

<BuildStep TeamFoundationServerUrl="$(TeamFoundationServerUrl)" 
       BuildUri="$(BuildUri)" 
       Status="Failed" 
       Message="%(AllErrorLines.Identity)"/> 

Al hacer el análisis del código en el servidor de compilación de esta manera, también evitamos tener que configurar cada proyecto por separado. Aislamos todo esto en un archivo .targets separado, por lo que agregar análisis de código a una solución era una cuestión de importar ese archivo, y quizás ajustar el comportamiento al establecer las propiedades adecuadas.

0

que tenía lo que creo que es un problema similar con regulador de velocidad no compilar utilizando el símbolo CODE_ANALYSIS compilación, incluso si "Habilitar análisis de código en Build (define constante CODE_ANALYSIS)" se registró VS.Net.

Parece que si se trata de comprobar o no, CODE_ANALYSIS es en realidad no se agrega explícitamente a la lista de símbolos de compilación en el csproj (incluso si aparece en el cuadro de texto "símbolos de compilación condicional"), sólo se añade <RunCodeAnalysis>true</RunCodeAnalysis>.

Al compilar a través de VS.Net, el CODE_ANALYSIS se agrega automáticamente, pero no cuando se usa MSBuild, que es lo que Cruise Control usa.

Eventualmente cambié en VS.Net los "símbolos de compilación condicional" de "CODE_ANALYSIS; MySymbol" a "MySymbol; CODE_ANALYSIS". Hacer eso obligó a CODE_ANALYSIS a aparecer también en el csproj.

Cuestiones relacionadas