TeamCity FxCop选择MinimumRecommendedRules.ruleset无效

Red*_*ed1 4 fxcop fxcopcmd teamcity-8.0

我在TeamCity 8.0.6(build 27767)中添加了一个Build Step,以针对特定的c#项目程序集执行FxCop.

当使用MinimumRecommendedRules设置从VS 2013中运行FxCop时,我没有得到任何错误或警告(我将它们全部修复).

现在我想在TeamCity中进行连接.要限制规则,我将指定命令行属性,如下所示:

/ruleSet:=MinimumRecommendedRules.ruleset  /rulesetdirectory:'FxCop\Rule Sets'
Run Code Online (Sandbox Code Playgroud)

(rulesetdirectory参数指向源树中包含标准规则集文件夹的完整内容的位置)

但是,这没有所需的行为,运行FULL规则集,我得到如下错误:

FxCop警告:关键字= CA0063种类=引擎类型= Microsoft.FxCop.Sdk.FxCopException*无法加载规则集文件"MinimumRecommendedRules.ruleset"或其依赖规则集文件之一.

这是TeamCity生成的命令行:

[17:32:29]开始:"C:\ Program Files(x86)\ Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\FxCopCmd.exe"/ forceoutput/ignoregeneratedcode /ruleSet:=MinimumRecommendedRules.ruleset"/ rulesetdirectory:'FxCop\Rule Sets'"/ f:dal\bin\release\MyDAL.dll /out:C:\TeamCity\buildAgent\temp\buildTmp\fxcop-output-1891867450083417003\fxcop-result.xml

谁能发现什么是错的?

Red*_*ed1 6

我想通了,所以希望这对其他人有帮助.

/ ruleSet:参数需要具有规则集文件的完整(相对或绝对)路径,如下所示:

/ruleSet:"=%teamcity.build.workingDir%\FxCop\RuleSets\MinimumRecommendedRules.ruleset"
Run Code Online (Sandbox Code Playgroud)

(注意:双引号用于处理teamcity.build.workingDir可能包含空格的可能性)

其次,不再需要第二个命令行参数/ rulesetdirectory:.我怀疑第二个参数实际上不起作用.

另请注意,我的工作命令行参数在我的源代码中指向我的MinimumRecommendedRules.ruleset文件.它可以很容易地被复制到"c:\ Program Files(x86)\ Microsoft Visual Studio 12.0\Team Tools\Static Analysis Tools\Rule Sets"下的标准规则集文件夹中.

最后,由于我的项目都是VS 2013,而TeamCity只识别到v10,我还将"特定安装根"设置为"c:\ Program Files(x86)\ Microsoft Visual Studio 12.0\Team Tools\Static Analysis Tools\FxCop"明确地确保使用最新版本的FxCop并且不会阻塞.Net 4.5代码.(注意:由于C++项目构建要求,我在构建服务器上安装了VS 2013,我对此并不满意,但事实证明这对我处理FxCop设置很方便.还有其他方法可以构建服务器上的FxCop内容,无需安装VS 2013)