如何将规则集文件转换为FXCop规则DLL?

时间:2013-10-25 10:45:13

标签: msbuild continuous-integration code-analysis fxcopcmd

我试图在我的持续集成系统中配置静态代码分析(FxCop)。但我的开发人员正在使用规则集文件与Visual Studio进行静态分析。

有没有办法可以重新使用相同的规则集文件并将其转换为FxCop规则集dll并在构建时执行静态代码分析?

提前致谢, 拉维

2 个答案:

答案 0 :(得分:1)

如果在CI服务器上安装了Visual Studio,则只需在MsBuild命令行上指定/p:RunCodeAnalysis=[True|False|Always|Default|Never]即可运行代码分析,因为它是在开发人员配置中配置的。规则文件自动包含在Visual Studio项目文件中,因此它们应该自行解决。

要在构建后运行FxCop,您可以将规则集指定为命令行参数:

C:\Program Files (x86)\Microsoft Visual Studio 12.0\Team Tools\Static Analysis Tools\FxCop>fxcopcmd /?
Microsoft (R) FxCop Command-Line Tool, Version 12.0 (12.0.21005.1) X86
Copyright (C) Microsoft Corporation, All Rights Reserved.

/ruleset:<<+|-|=>file>  [Short form: /rs:<<+|-|=>file>]
Rule set to be used for the analysis. It can be a file path to the rule set
file or the file name of a built-in rule set. '+' enables all rules in the
rule set; '-' disables all rules in the rule set; '=' sets rules to match the
rule set and disables all rules that are not enabled in the rule set.

/rulesetdirectory:<directory>  [Short form: /rsd:<directory>]
Directory to search for rule set files that are specified by the /ruleset
switch or are included by one of the specified rule sets.

从命令行运行FxCop的困难之处在于,您需要传递所有引用,并且它只能处理针对相同.NET系统库的文件(它只能在内存中保存其中一个)。您可以使用以下参数指定这些引用:

/platform:<directory>  [Short form: /plat:<directory>]
Location of platform assemblies.

/directory:<directory>  [Short form: /d:<directory>]
Location to search for assembly dependencies.

/reference:<file>  [Short form: /ref:<file>]
Reference assemblies required for analysis.

答案 1 :(得分:0)

如果您只想运行代码分析而无需直接调用fxcop并指定所有额外信息,请执行以下操作:

<MSBuild Projects="@(CodeAnalysisProjects)" Properties="RunCodeAnalysis=True;Configuration=Release;BuildProjectReferences=False;WarningsAsErrors=False;RunCodeAnalysisDependsOn=;" Targets="RunCodeAnalysis" StopOnFirstFailure="false" />

您发送项目组CodeAnalysisProjects.中的项目列表您运行目标RunCodeAnalysis并设置属性RunCodeAnalysis=True.您还设置属性RunCodeAnalysisDependsOn=;以便不执行任何操作除了代码分析之外还运行。

这与我们用于CI的解决方案相同。我们整天建立,然后只在晚上运行代码分析。