2

我最近在 Stackoverflow 上写了一篇文章,询问一些计算指标的 C# 库,主要是 CC ......不幸的是没有成功。所以我要自己写。我在网上搜索了可能是最好的方法,但在开始之前,我想问你如何做到这一点。

我目前介于两种方法之间

  • 给定一个源代码目录,用正则表达式或类似表达式解析源代码,以识别方法、条件语句等结构,以便能够计算 CC
  • 给定一个程序集,加载并分析它(使用 CodeDom?)

我更喜欢第二种方法,因为直接解析源代码对我来说似乎不是一个好方法。我已经阅读了集成在 .Net 框架中的 CodeDom。我知道它用于动态代码生成。我想我也可以用它来分析代码结构,不是吗?你们中是否有人有使用 CodeDom 的一些好的起点、一些提示、好的教程从哪里开始?

谢谢

编辑:或者可能是其他一些允许轻松解析源代码的实用程序(类似 DOM 的结构)。

4

6 回答 6

3

宪兵在Mono.Cecil的帮助下做了一些代码指标(有点),也许它会对你想要完成的事情有所帮助?

于 2009-07-08T23:19:46.733 回答
1

查看 Microsoft Research 的Common Compiler Infrastructure (CCI)

于 2009-07-08T20:08:05.700 回答
0

使用 CodeDom 的问题在于它是一种方式——有用于生成代码的 API,但没有用于解析代码的 API。我似乎记得听说过一些将代码解析为 CodeDom 结构的不受支持/隐藏的 API,但我不确定。

另外,您将如何从程序集本身获取代码?反射不会影响到 IL,而只会影响到类的成员。

于 2009-07-08T19:40:23.913 回答
0

看看这篇 CodeProject 文章。这似乎是您尝试做的事情的开始,但需要一些补充;因为文章中的示例代码不解析成员,只解析类型和命名空间。

据我所知,不存在完整的 CodeDOM 解析器,BCL 团队博客也提到了这一点。

于 2009-07-08T20:16:13.920 回答
0

请参阅计算 CC 和各种其他指标的C# 指标工具。

于 2009-08-08T02:47:49.720 回答
0

既然您关心 .NET,请查看使用.Net Reflector

有多种插件,其中之一计算一些基本指标,包括 CC。

如果你没有找到你要找的东西,为什么不自己写。.NET Reflector 有一个插件 API ,提供一种 CodeDom 模型,您可以轻松分析它(另见页面底部)

于 2009-11-09T15:20:04.967 回答