在我们的本地计算机上和相同代码库(Visual Studio Online上的TFS)上的构建服务器上运行完全相同的规则集时,我们会得到不同的结果。
本地代码分析输出:
Running Code Analysis...
C:\Program Files (x86)\Microsoft Visual Studio 12.0\Team Tools\Static Analysis Tools\FxCop\FxCopCmd.exe
/outputCulture:1033
/ruleSet:"=C:\Workspaces\ProjectName\CodeAnalysis\CodeAnalysisRuleSet.ruleset"
/rulesetdirectory:"C:\Program Files (x86)\Microsoft Visual Studio 12.0\Team Tools\Static Analysis Tools\\Rule Sets"
/rule:"-C:\Program Files (x86)\Microsoft Visual Studio 12.0\Team Tools\Static Analysis Tools\FxCop\\Rules"
/searchgac
/ignoreinvalidtargets
/forceoutput
/successfile
/ignoregeneratedcode
/saveMessagesToReport:Active
/timeout:120
构建服务器的代码分析输出:
Running Code Analysis...
C:\Program Files (x86)\Microsoft Visual Studio 11.0\Team Tools\Static Analysis Tools\FxCop\FxCopCmd.exe
/outputCulture:1033
/ruleSet:"=C:\a\Sources\ProjectName\Trunk\SharedResources\..\..\CodeAnalysis\CodeAnalysisRuleSet.ruleset"
/rulesetdirectory:"C:\Program Files (x86)\Microsoft Visual Studio 11.0\Team Tools\Static Analysis Tools\\Rule Sets"
/rule:"-C:\Program Files (x86)\Microsoft Visual Studio 11.0\Team Tools\Static Analysis Tools\FxCop\\Rules"
/searchgac
/ignoreinvalidtargets
/forceoutput
/successfile
/ignoregeneratedcode
/saveMessagesToReport:Active
/timeout:120
MSBUILD : error : CA1034 : Microsoft.Design : Do not nest type 'SpatialFunctions.RelativeStopType'. Alternatively, change its accessibility so that it is not externally visible.
Code Analysis Complete -- 1 error(s), 0 warning(s)
构建服务器选择了本地分析(CA1034)遗漏的问题。
我能看到的唯一区别是TFS正在使用MS Visual Studio 11工具(而我们正在使用VS 12.0进行开发)。我无法想象为什么这应该有所作为。
我们正在使用Visual Studio 2013。
答案 0 :(得分:2)
在VS2013中更改了CA1034规则以忽略嵌套枚举。如果您不希望忽略嵌套枚举,则需要添加自定义规则以在VS2013下检测它们。如果您不介意忽略它们,那么在构建服务器上构建VS2013似乎是解决差异的最简单方法。 (无论您如何决定处理差异,建议在开发人员计算机和构建服务器上使用相同的VS版本进行构建。)
答案 1 :(得分:1)
您的构建服务器正在使用Visual Studio 2012中的FxCop二进制文件,而不是2013年的版本。每次发布新版本的Visual Studio时,都会对规则进行一些更新以修复错误,并且有一些规则可以得到了补充。 .NET SDK版本之间的certain code generation scenario's也存在差异。
鉴于这些知识,我不会惊讶于不同版本的工具有不同的发现。你可能会问怎么解决?在构建服务器上安装Visual Studio 2013,并确保团队构建中的“运行MSBuild for Projects”活动指向正确的tools目录(Visual Studio 2013附带的MsBuild)。
或者:确保您使用的是TFS 2013和Team Build 2013,如果安装了两个版本的Visual Studio,它们应该自行解决这个问题。