我在TeamCity 8.0.6 (build 27767)中添加了一个构建步骤,以针对特定的c#项目程序集执行FxCop。
当在VS 2013中使用FxCop集运行MinimumRecommendedRules时,我不会收到任何错误或警告(我将它们全部修复)。
现在我想用TeamCity把这个连接起来。为了限制规则,我将命令行属性指定如下:
/ruleSet:=MinimumRecommendedRules.ruleset /rulesetdirectory:'FxCop\Rule Sets'
(规则目录参数指向源树中的位置,其中包含标准规则集文件夹的全部内容)
但是,这没有所需的行为,因此将运行完整的规则集,并得到如下错误:
FxCop警告: Keyword=CA0063 Kind=Engine Type=Microsoft.FxCop.Sdk.FxCopException *未能加载规则集文件'MinimumRecommendedRules.ruleset‘或其依赖的规则集文件之一。
这是TeamCity生成的命令行:
17:32:29启动:"C:\Program (X86)\MicrosoftVisualStudio10.0\Tools\StaticAnalysisTools\FxCop\FxCopCmd.exe“/forceoutput /ignoregeneratedcode /ruleSet:=MinimumRecommendedRules.ruleset”/规则目录:‘FxCop\Rule’“/f:dal\bin\release\MyDAL.dll /f:dal\bin\release\MyDAL.dll
有人能发现出什么问题了吗?
发布于 2014-07-17 14:47:46
我想出来了,希望这对其他人有帮助。
/ruleSet:参数需要有规则集文件的完整(相对路径或绝对路径),如下所示:
/ruleSet:"=%teamcity.build.workingDir%\FxCop\RuleSets\MinimumRecommendedRules.ruleset"
(注意:双引号是为了处理teamcity.build.workingDir可能包含空格的可能性)
其次,第二个命令行参数/rulesetdirectory:不再必要。我怀疑第二个参数实际上不起作用。
还请注意,我的工作命令行参数在这里指向我的MinimumRecommendedRules.ruleset文件在我的源代码。它可以很容易地复制到"c:\Program (X86)\MicrosoftVisualStudio12.0\Tools\\ Rule“下的标准规则集文件夹中。
最后,由于我的项目都是VS 2013,而且TeamCity只识别到v10,我还将“专门安装根”设置为"c:\Program (X86)\MicrosoftVisualStudio12.0\Tools\\ FxCop“,以确保使用的是最新版本的FxCop,不会阻塞.Net 4.5代码。(注意:由于C++项目的构建需求,我在构建服务器上安装了VS 2013,我对此并不满意,但事实证明,这对我处理FxCop设置非常方便。还有其他方法可以在不安装VS 2013的情况下将FxCop内容放在构建服务器上)
https://stackoverflow.com/questions/24786283
复制相似问题