2008-12-08 4 views
11

Ich möchte den Prozess zum Sammeln von Code-Metriken auf einer .NET-Lösung automatisieren. Gibt es eine Möglichkeit, mit Msbuild das in der VS2008 Development Edition enthaltene Feature "Code Metrics" auszuführen?So automatisieren Sie die Code Metrics-Funktion von Visual Studio

Ich kann am Ende SourceMonitor verwenden, aber ich würde gerne wissen, ob es eine Möglichkeit gibt, die VS-Code-Metrik-Engine von der Befehlszeile aus zu verwenden.

Antwort

5

Dies ist, wie meine Firma FxCop mit MSBuild automatisiert:

<!-- 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> 

Dann können Sie einige C# -Code die Ausgabedatei zu verbrauchen schreiben:

/// <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 - ich glaube, er ist Bezug auf Code-Metriken (zyklomatische Komplexität usw.) und nicht auf FxCop. Ich habe auch nach einer Lösung gesucht, da die FxCop-Regel für Komplexität festgeschriebene Schwellenwerte hat. Es scheint, als ob es noch keine Kommandozeile oder API für die Metriken in VS2008 gibt (per this post im Code Analysis Team Blog) - hoffentlich werden sie ein Powertool veröffentlichen.

Haben Sie sich NDepend dafür angesehen?