11

我想自动化在 .NET 解决方案上收集代码指标的过程。有什么方法可以让 msbuild 运行 VS2008 开发版中包含的 Code Metrics 功能?

我最终可能会使用SourceMonitor,但我想知道是否有办法从命令行使用 VS 代码指标引擎。

4

3 回答 3

9

最后,微软为我们提供了一种使用新的“电动工具”自动化 Visual Studio 代码度量功能的方法。

于 2011-02-10T17:26:36.123 回答
5

这就是我的公司使用 MSBuild 自动化 FxCop 的方式:

<!-- 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);
}
于 2009-01-07T21:28:54.330 回答
2

jgwood - 我相信他指的是代码度量(圈复杂度等)而不是 FxCop。我也一直在为此寻找解决方案,因为复杂性的 FxCop 规则具有硬编码的阈值。听起来 VS2008 中的指标还没有命令行或 API(根据代码分析团队博客上的这篇文章)——希望他们会发布一个 powertool。

你看过NDepend吗?

于 2009-01-20T14:57:22.973 回答