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

本文关键字:结果 代码 规则集 | 更新日期: 2023-09-27 17:58:37

当在本地计算机和构建服务器上使用相同的代码库(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。

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

CA1034规则在VS2013中已更改为忽略嵌套枚举。如果不希望忽略嵌套枚举,则需要添加一个自定义规则来在VS2013下检测它们。如果你不介意忽略它们,那么在构建服务器上在VS2013下构建似乎是解决差异的最简单方法。(无论您决定如何处理差异,都非常建议在开发人员机器和构建服务器上使用相同的VS版本进行构建。)

您的构建服务器使用的是Visual Studio 2012中的FxCop二进制文件,而不是2013中的二进制文件。每次发布Visual Studio的新版本时,都会对规则进行一些更新以修复错误,并添加了一些规则。在某些代码生成场景中,.NET SDK版本之间也存在差异。

鉴于这些知识,我对不同版本的工具有不同的发现并不感到惊讶。你可能会问如何修复它?在生成服务器上安装Visual Studio 2013,并确保团队生成中的"为项目运行MSBuild"活动指向正确的工具目录(Visual Studio 2013附带的MSBuild目录)。

或者:请确保您使用的是TFS 2013和Team Build 2013,如果安装了这两个版本的Visual Studio,它们应该自己解决这个问题。