4

我在 TeamCity 8.0.6(内部版本 27767)中添加了一个构建步骤,以针对特定的 c# 项目程序集执行 FxCop。

在 VS 2013 中使用 MinimumRecommendedRules 集运行 FxCop 时,我没有收到任何错误或警告(我已全部修复)。

现在我想在 TeamCity 中连接它。为了限制规则,我指定了一个命令行属性,如下所示:

/ruleSet:=MinimumRecommendedRules.ruleset  /rulesetdirectory:'FxCop\Rule Sets'

(rulesetdirectory 参数指向我的源代码树中的一个位置,该位置包含标准规则集文件夹的全部内容)

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

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“/规则集目录:'FxCop\Rule Sets'" /f:dal\bin\release\MyDAL.dll /out:C:\TeamCity\buildAgent\temp\buildTmp\fxcop-output-1891867450083417003\fxcop-result.xml

谁能发现哪里出了问题?

4

1 回答 1

6

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

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

/ruleSet:"=%teamcity.build.workingDir%\FxCop\RuleSets\MinimumRecommendedRules.ruleset"

(注意:双引号是为了处理 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)

于 2014-07-17T14:47:46.467 回答