【问题标题】:Different Code Analysis results on the same rule set同一规则集上的不同代码分析结果
【发布时间】:2014-04-16 21:32:29
【问题描述】:

当在我们的本地机器和构建服务器上的相同代码库(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 Online (VSO) 来存储源代码,您是否也在使用他们的构建服务器?还是您配置了本地构建服务器?
  • 我也在使用他们的构建服务器。抱歉没有说清楚。

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


【解决方案1】:

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

【讨论】:

  • 这可以解释为什么 CA1034 是唯一的区别。谢谢
【解决方案2】:

您的构建服务器使用 Visual Studio 2012 中的 FxCop 二进制文件,而不是 2013 年的二进制文件。每次发布新版本的 Visual Studio 时,都会对规则进行一些更新以修复错误,并且有一些规则被添加了。 .NET SDK 版本之间的certain code generation scenario's 也存在差异。

考虑到这些知识,我对不同版本的工具有不同的发现并不感到惊讶。您可能会问如何解决它?在构建服务器上安装 Visual Studio 2013 并确保团队构建中的“为项目运行 MSBuild”活动指向正确的工具目录(Visual Studio 2013 附带的 MsBuild 目录)。

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

【讨论】:

  • 感谢您的回答。我们正在使用 Visual Studio Online 上提供的构建服务,因此无法升级。必须在所有开发人员机器上安装 VS 2012 也是不可行的。有没有其他方法可以解决这个问题?
  • 我希望 VS 2013 能够安装在 VSO 的构建服务器上...我想知道您是否使用的是较旧的构建过程模板,但这对我来说很难调试聊天窗口。
  • 我查看了流程模板,发现以下 Activity 属性:this:Process.BuildProcessVersion="11.0"。我将其设置为 12.0。会不会有什么影响?
  • 它将尝试在服务器上使用 VS2013 :)。似乎正是您想要它做的事情。
  • 我通过添加以下 MSBUILD 参数来修复它:/p:VisualStudioVersion=12.0。将您的答案标记为完整,因为您的帮助最终会引导我找到解决方案!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-01
  • 1970-01-01
  • 2012-04-25
相关资源
最近更新 更多