Visual Studio 代码分析与 StyleCop + FxCop

Posted

技术标签:

【中文标题】Visual Studio 代码分析与 StyleCop + FxCop【英文标题】:Visual Studio Code Analysis vs StyleCop + FxCop 【发布时间】:2010-10-09 11:21:05 【问题描述】:

我以前在 Visual Studio 的项目中使用过 StyleCop + FxCop。但是现在我正在测试Visual Studio Code Analysis工具,它更容易集成到MSBuild中,我发现这个工具分析了FxCop和StyleCop的一些规则。

这个工具是完全替代 FxCop 和 StyleCop 还是只是实现了它们的一些规则?

【问题讨论】:

仅供参考,代码分析仅适用于 Premium 及更高版本,不适用于 Professional。见msdn.microsoft.com/en-us/library/dd264939%28v=VS.100%29.aspx 代码分析现在可在 Visual Studio 2012 Professional 及更高版本中使用。见msdn.microsoft.com/en-us/library/dd264931.aspx 代码分析现在可在(某种)免费的 Visual Studio 2013 社区版中使用。见visualstudio.com 【参考方案1】:

Visual Studio 包括 FxCop + 更多。

来自developer blog of FxCop:

抱歉我的无知,但我认为 FxCop 完全独立于 VSTS 中的代码分析?更多的 具体来说,我假设如果我 安装新版本的 FxCop,VSTS 不会利用(不共享 代码?)?如果是这种情况,任何想法 当这些变化将使它成为 VSTS代码分析?谢谢!

没错,它们是不同的 产品,但是它们确实有 通用发动机。视觉工作室 2008 SP1 已经带有相同的修复和 分析(再加一点),所以 无需“更新”视觉 带有最新 FxCop 的工作室。

developer blog 也给出了每个规则的确切规则。

对于 StyleCop,它独立于 VS 代码分析,如 this blog post 中所述,它链接到 Jader Dias' post。

【讨论】:

开发者博客链接失效,但这里有一篇文章列出了规则集docs.microsoft.com/en-us/visualstudio/code-quality/…【参考方案2】:

我的理解是,Visual Studio Code Analysis 基本上是 FxCop 的略微修改版本。根据我的经验,它们几乎是一回事(事实上,我相信代码分析在幕后使用 FxCop 可执行文件)。

虽然 FxCop/CodeAnalysis 和 StyleCop 有重叠; FxCop 更关注设计规则,而 StyleCop 更关注编码风格(大小写、空格、缩进等)。

FxCop 分析 IL 而 StyleCop 直接分析源代码。这对它们各自可以执行的规则施加了不同的限制。

【讨论】:

【参考方案3】:

到目前为止,我的谷歌搜索结果如下:

http://blogs.msdn.com/bharry/archive/2008/07/19/clearing-up-confusion.aspx

状态:

“事实上,我们发现 StyleCop 是一个非常有用的工具,它可以做 FxCop 和 TeamDev 不做的事情(而且它不做他们做的事情)。它是一个很好的补充工具。StyleCop 是一种用于进行编码风格检查的工具,以验证源代码是否按照您想要的方式格式化并遵循约定的风格指南。虽然与 FxCop 有一些重叠(如检查标识符大小写),但重叠很小,因为 StyleCop 不做其他静态分析工具为启用代码正确性检查、安全检查等所做的深入分析。”

但我不确定“TeamDev”是否与“Visual Studio 的代码分析”相同

【讨论】:

以上是关于Visual Studio 代码分析与 StyleCop + FxCop的主要内容,如果未能解决你的问题,请参考以下文章

如何让 FxCop 拥有与 Visual Studio 代码分析相同的规则集?

带你玩转Visual Studio——性能分析与优化

Visual Studio 2017 中的静态代码分析工具

Visual Studio强大的帮助工具--Resharper安装与使用

Visual Studio 2010 性能分析能否与用 C# 编写的 Windows 服务一起工作

VS2015提示:未安装Style的Visual Studio语言支持,代码编辑Intellisense将不可用。服务器控件的标记Intellisense可能不起作用