TeamCity FxCop 选择 MinimumRecommendedRules.ruleset 无效
Posted
技术标签:
【中文标题】TeamCity FxCop 选择 MinimumRecommendedRules.ruleset 无效【英文标题】:TeamCity FxCop Selecting MinimumRecommendedRules.ruleset has no effect 【发布时间】:2014-07-16 16:44:17 【问题描述】:我在 TeamCity 8.0.6(内部版本 27767)中添加了一个构建步骤,以针对特定的 c# 项目程序集执行 FxCop。
在 VS 2013 中使用 MinimumRecommendedRules 集运行 FxCop 时,我没有收到任何错误或警告(我已全部修复)。
现在我想在 TeamCity 中进行连接。为了限制规则,我指定了一个命令行属性,如下所示:
/ruleSet:=MinimumRecommendedRules.ruleset /rulesetdirectory:'FxCop\Rule Sets'
(rulesetdirectory 参数指向我的源代码树中的一个位置,该位置包含标准规则集文件夹的全部内容)
但是,这没有所需的行为,运行完整的规则集,我收到如下错误:
FxCop 警告:Keyword=CA0063 Kind=Engine Type=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。规则集 "/rulesetdirectory:'FxCop\Rule Sets'" /f:dal\bin\release\MyDAL.dll /out:C:\TeamCity\buildAgent\temp\buildTmp\fxcop-output-1891867450083417003\fxcop-result.xml
谁能发现问题所在?
【问题讨论】:
【参考方案1】:我想通了,希望这对其他人有帮助。
/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)
【讨论】:
以上是关于TeamCity FxCop 选择 MinimumRecommendedRules.ruleset 无效的主要内容,如果未能解决你的问题,请参考以下文章
如何在 TeamCity 中导入/解析 fxcop/stylecop 生成的 xml 报告