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

问题描述:

当我们的本地机器和构建服务器上的相同代码库(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

问题:你说你使用Visual Studio Online(VSO)来存储源代码,你是否也在使用他们的构建服务器?或者你配置了本地构建服务器吗? – jessehouwing

+0

我也在使用他们的构建服务器。抱歉不明确。 – davenewza

使用从Visual Studio 2012中的FxCop二进制您的构建服务器,而不是那些在2013年每一次的Visual Studio的新版本发布已经有一些更新修正错误的规则,并且有一些规则被添加。 .NET SDK版本之间的certain code generation scenario's也有所不同。

鉴于这些知识,我不惊讶于不同版本的工具有不同的发现。如何解决它你可能会问?在构建服务器上安装Visual Studio 2013,确保团队构建中的“运行MSBuild for Projects”活动指向正确的工具目录(随Visual Studio 2013一起提供的MsBuild)。

或者:确保您使用的是TFS 2013和Team Build 2013,如果安装了两个版本的Visual Studio,应该自行确定。

+0

感谢您的回答。我们正在使用Visual Studio Online上的构建服务,因此无法升级。必须在所有开发人员机器上安装VS 2012也不可行。有没有其他方法可以解决这个问题? – davenewza

+0

我期望在VSO的构建服务器上安装VS 2013 ...我想知道您是否使用较旧的构建过程模板,但是我很难在聊天窗口中进行调试。 – jessehouwing

+0

我看着流程模板,发现以下Activity属性:'this:Process.BuildProcessVersion =“11.0”'。我会将其设置为12.0。这会有什么后果吗? – davenewza

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

+0

这会解释为什么CA1034是唯一的区别。谢谢 – davenewza