我正在尝试在我的持续集成系统中配置静态代码分析(FxCop)。但是我的开发人员正在使用规则集文件与 Visual Studio 进行静态分析。
有没有办法让我可以重复使用相同的规则集文件并将其转换为 FxCop 规则集 dll 并在构建时执行静态代码分析?
在此先感谢,拉维
我正在尝试在我的持续集成系统中配置静态代码分析(FxCop)。但是我的开发人员正在使用规则集文件与 Visual Studio 进行静态分析。
有没有办法让我可以重复使用相同的规则集文件并将其转换为 FxCop 规则集 dll 并在构建时执行静态代码分析?
在此先感谢,拉维
如果您在 CI 服务器上安装了 Visual Studio,那么只需/p:RunCodeAnalysis=[True|False|Always|Default|Never]
在 MsBuild 命令行上指定即可运行代码分析,因为它是在开发人员的配置中配置的。规则文件自动包含在 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.
如果您只想运行代码分析而无需直接调用 fxcop 并指定所有额外信息,请执行以下操作:
<MSBuild Projects="@(CodeAnalysisProjects)" Properties="RunCodeAnalysis=True;Configuration=Release;BuildProjectReferences=False;WarningsAsErrors=False;RunCodeAnalysisDependsOn=;" Targets="RunCodeAnalysis" StopOnFirstFailure="false" />
您发送项目组中的项目列表CodeAnalysisProjects.
您运行目标RunCodeAnalysis
并设置属性RunCodeAnalysis=True.
您还设置属性RunCodeAnalysisDependsOn=;
,以便除了代码分析之外没有任何其他运行。
这与我们用于 CI 的解决方案相同。我们整天构建,然后只在晚上运行代码分析。