除了 FxCop 之外,.net 中的代码分析还有其他选择吗?

Posted

技术标签:

【中文标题】除了 FxCop 之外,.net 中的代码分析还有其他选择吗?【英文标题】:Any alternatives for code analysis in .net apart from FxCop? 【发布时间】:2011-08-24 07:01:21 【问题描述】:

我想知道是否有代码分析的替代方案。我想人们可以从头开始创建代码分析器,尽管这是一项乏味的工作,而且我不确定它是否值得。是否还有其他非 .net 特定的分析器?

谢谢, 孙

【问题讨论】:

有多种工具可用于执行各种可能被视为“代码分析”的不同事情。您是否正在寻找特定的东西? 我们首先需要的是编码标准,我认为 StyleCop 做到了。另一个是代码复杂性,尽管它又是模糊的;它基本上取决于工具的输出......我们无法确切知道我们在看什么,但我们不需要 FxCop 输出(或至少大部分输出)。 【参考方案1】:

NDepend是一个商业工具(有开源/学术版),可以为你做各种分析。虽然它在某些规则上与 FxCop 有重叠,但 at 还有更多功能。

我想人们可以从头开始创建代码分析器

一切皆有可能,但编写任何有意义的验证工具都需要花费大量时间。如果你的老板付钱给你开发软件,你会烧掉他的钱。编写自己的分析器是一个很好的练习,但进一步完全是浪费时间。

【讨论】:

感谢您的回答,但目前我们只寻找免费软件版本。【参考方案2】:

http://www.mono-project.com/Gendarme 开源且免费。

https://github.com/unintelligible/GendarmeMsBuild 是一个不错的插件。

【讨论】:

感谢您的回答,虽然它是 VS2010 特有的,否则它需要单声道编译器... Gendarme 不需要执行 Mono(即它在使用 MS.NET 的 Windows 上运行良好),也不需要使用 Mono 编译器或工具进行编译(即 Gendarme 的 Win32 版本是使用 VS2010 构建的)。 IWO 宪兵可以在任何地方运行(有一个 .NET 虚拟机)并针对任何已编译的 IL 执行。【参考方案3】:

我认为 ReSharper 也有一些代码分析功能,在 SO 中也可以搜索这里。

顺便说一句,我找到了这个:http://www.itscodingtime.com/post/Visual-Studio-Code-Analysis-vs-FxCop-vs-StyleCope280a6-whats-the-diff.aspx

还可以查看声纳源:

http://www.sonarsource.org,这是开源的:)

【讨论】:

感谢您的回答,但目前我们只寻找免费软件版本。 Sonar 的 C# 分析主要依赖 StyleCop、FxCop 和 Gendarme。 现在已经不是这样了。 SonarC# 现在主要依靠自己的引擎和规则集。【参考方案4】:

我的公司提供多种分析 C# 的工具。

我们的CloneDR 可检测准确和几乎未命中的重复代码检测器。 有一个C# Metrics 工具。 DMS Software Reengineering Toolkit 是构建您想要的任何自定义分析工具的基础。有一个 C# Front End 处理所有 C# 4.0 的解析/树构建。

您在广泛地询问分析工具,所以我假设您不仅对静态分析感兴趣。我们还为 C# 提供(基于动态分析的)测试覆盖率和分析器。

【讨论】:

感谢您的回答,但目前我们只寻找免费软件版本。【参考方案5】:

正如 Davide Piras 所说,您应该明确了解一下 sonar C# 插件生态系统。我是该项目的主要贡献者之一,我不属于 sonarsource。 这些插件和声纳本身是开源的。许可证是 LGPL,因此对商业友好。

如果您想在 C# 项目中查看声纳,请查看演示实例:

http://nemo.sonarsource.org/dashboard/index/org.mybatis:mybatisdotnet

官方文档在这里:

http://docs.codehaus.org/display/SONAR/C-Sharp+Plugins+Ecosystem

如果您需要帮助或对安装过程有任何疑问,请随时订阅用户邮件列表:

http://www.sonarsource.org/support/support/

【讨论】:

以上是关于除了 FxCop 之外,.net 中的代码分析还有其他选择吗?的主要内容,如果未能解决你的问题,请参考以下文章

Visual Studio 代码分析 (fxCop) 仅在第一次构建后运行

静态代码分析的好处

用于非 .Net C++ 代码的 FxCop(或等效项)

如何修复 FxCop 错误代码 512?

VS2012 与 Fxcop 中的代码分析

VS2008中的代码分析(FxCop)功能在哪里?