2008-12-08 47 views

回答

5

這是我的公司如何使用自動的FxCop的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> 

然後,你可以寫一些C#代碼來使用輸出文件:

/// <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 - 我相信他是指代碼度量(圈度複雜度等)而不是FxCop。我一直在尋找一個解決方案,因爲FxCop複雜性規則具有硬編碼的閾值。聽起來好像VS2008中的指標沒有命令行或API(代碼分析團隊博客上的this post) - 希望他們能發佈powertool。

你有沒有看着NDepend這個?

相關問題