2008-12-08 23 views

Respuesta

5

Así es como mi compañía ha automatizado FxCop utilizando MSBuild:

<!-- The directory where FxCop is installed. --> 
<FxCopDirectory>C:\Program Files\Microsoft FxCop 1.36</FxCopDirectory> 

<!-- The FxCop console executable.. --> 
<FxCopCmd>$(FxCopDirectory)\FxCopCmd</FxCopCmd> 

<Target Name="CodeAnalysis> 
<!-- Once to get XML for metrics. --> 
<Exec Command="&quot;$(FxCopCmd)&quot; /p:&quot;$(BuildDirectory)\FxCop\RuleSet.FxCop&quot; /out:$(BuildResults)\FxCop.xml /summary /verbose /f:$(Binaries)\@(CodeAnalysis, ' /f:$(Binaries)\')" /> 

<!-- Once to report with the build results. --> 
<Exec Command="&quot;$(FxCopCmd)&quot; /p:&quot;$(BuildDirectory)\FxCop\RuleSet.FxCop&quot; /out:$(BuildResults)\FxCop.html /summary /verbose /applyoutXsl:$(MSBuildTasks)\CodeAnalysisReport.xsl /f:$(Binaries)\@(CodeAnalysis, ' /f:$(Binaries)\')" /> 

<!-- Update the FxCop report so that it is fully expanded by default. --> 
<FileUpdate Regex="&lt;body\s" 
      ReplacementText="&lt;body onLoad=&quot;ExpandAll();&quot; " 
      Files="$(BuildResults)\FxCop.html" /> 
</Target> 

Entonces, se puede escribir algo de código C# para consumir el archivo de salida:

/// <summary> 
/// Gather metrics for code analysis. 
/// </summary> 
private static void GatherCodeAnalysisMetrics() 
{ 
    string file = @"$(BuildResults)\FxCop.xml"; 
    if (!File.Exists(file)) return; 
    System.Xml.XmlDocument document = new System.Xml.XmlDocument(); 
    document.Load(file); 
    System.Xml.XmlNodeList list = document.SelectNodes("//Message"); 
    codeAnalysisWarnings = list.Count; 

    Console.WriteLine("Code analysis warnings: " + codeAnalysisWarnings); 
} 
2

jgwood - Creo que está haciendo referencia a Code Metrics (complejidad ciclomática, etc.) y no a FxCop. He estado buscando una solución para esto también, ya que la regla FxCop para la complejidad tiene umbrales codificados. Parece que todavía no hay línea de comandos o API para las métricas en VS2008 (por this post en el Blog del Equipo de Análisis de Código), con suerte lanzarán una herramienta de poder.

¿Has visto NDepend para esto?

Cuestiones relacionadas