【问题标题】:Analyzing code structure using CodeDom?使用 CodeDom 分析代码结构?
【发布时间】:2009-07-08 19:31:30
【问题描述】:

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

我目前处于两种方法之间

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

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

谢谢

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

【问题讨论】:

  • 我不认为您可以从已编译的程序集中加载 CodeDOM 图 ...
  • 来自源代码?这可能吗?
  • API 在那里,但 C# 和 VB CodeDom 提供程序都没有实现它的源到图部分。他们只做图到源。
  • 正如@chyne 所指出的,mono.cecil 看起来很有希望。如果您在 codeplex 上打开一个项目或其他什么,请告诉我 :)
  • 您可以将 NRefactory 用于源 -> ast 解析器。

标签: c# .net metrics codedom code-metrics


【解决方案1】:

Gendarme 在Mono.Cecil 的帮助下进行了一些代码度量(某种意义上的),也许它会帮助您实现目标?

【讨论】:

    【解决方案2】:

    查看来自 Microsoft Research 的 Common Compiler Infrastructure (CCI)。

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

      • 我不能使用反射,你是对的。但是是否可以将表示为字符串的代码加载到 CodeDom 中,然后遍历 CodeDom 结构?这个工具似乎使用了这样的方法:anticipatingminds.com/Content/Products/devMetrics/…
      • 很久没研究CodeDom了,不过当时也没有解析器。您确定 devMetrics 对程序集起作用,而不是代码本身吗?
      【解决方案4】:

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

      据我所知,没有完整的 CodeDOM 解析器,on the BCL Team Blog 也提到过。

      【讨论】:

        【解决方案5】:

        请参阅C# Metrics tool,它计算 CC 和各种其他指标。

        【讨论】:

          【解决方案6】:

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

          Plugins 有很多种,其中一种计算包括 CC 在内的一些基本指标。

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

          【讨论】:

            猜你喜欢
            • 2019-11-12
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2020-04-03
            • 1970-01-01
            • 1970-01-01
            • 2014-04-15
            • 1970-01-01
            相关资源
            最近更新 更多