同一规则集上的不同代码分析结果
当我们的本地机器和构建服务器上的相同代码库(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年
使用从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,应该自行确定。
感谢您的回答。我们正在使用Visual Studio Online上的构建服务,因此无法升级。必须在所有开发人员机器上安装VS 2012也不可行。有没有其他方法可以解决这个问题? – davenewza
我期望在VSO的构建服务器上安装VS 2013 ...我想知道您是否使用较旧的构建过程模板,但是我很难在聊天窗口中进行调试。 – jessehouwing
我看着流程模板,发现以下Activity属性:'this:Process.BuildProcessVersion =“11.0”'。我会将其设置为12.0。这会有什么后果吗? – davenewza
VS2013中的CA1034规则已更改为忽略嵌套枚举。如果您不希望嵌套的枚举被忽略,则需要添加一个自定义规则以在VS2013下检测它们。如果你不介意忽略它们,那么在构建服务器上构建VS2013似乎是解决差异的最简单方法。 (不管你如何决定如何处理这种差异,建议在开发者机器和构建服务器上使用相同的VS版本进行构建)。
这会解释为什么CA1034是唯一的区别。谢谢 – davenewza
问题:你说你使用Visual Studio Online(VSO)来存储源代码,你是否也在使用他们的构建服务器?或者你配置了本地构建服务器吗? – jessehouwing
我也在使用他们的构建服务器。抱歉不明确。 – davenewza