不同的代码分析结果在同一规则集上

时间:2014-04-16 08:03:05

标签: c# visual-studio tfs code-analysis azure-devops

在我们的本地计算机上和相同代码库(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。

2 个答案:

答案 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,它们应该自行解决这个问题。