提取class条信息

Extract class information

我需要为我的代码创建某种文档。为此,我必须从数百个 C# classes.

中提取信息

基本上每个 class 都包含一些方法 MyMethod。在这种方法中,可能有 switch 个案例,案例很少。整体代码结构是这样的

MyMethod()
{
..some code..

switch (variable)
    case "A":
          break;
    case "B":
          break;

..some other code..
}

我只需要在 MyMethod 中查找 switch case 并提取 case 值。

到目前为止,我想出了使用 Roslyn 或 Nrefactory 解析所有 .cs 文件然后使用 AST 调查它们以提取我需要的 AST 节点的选项。

但是这种方法看起来有点奇怪,因为任务可能可以通过其他方式完全自动化。我有清晰的文件结构,我确切地知道我需要检查的方法名称,并且其中只有一个 switch 语句。总是。

是否有任何其他方便的方法来提取信息并生成此文档?

我唯一能想到的就是解析 C# 文件或使用 Mono.Cecil 或类似方法解析已编译的 IL。在前一种情况下,我朋友写了一个C#解析器available here.

当然,如果您采用 parse-cs 方式,Roslyn 现在是您提到的合适选择。这里有一个快速介绍:http://www.filipekberg.se/2011/10/20/using-roslyn-to-parse-c-code-files/

您想解析 C# 代码。使用适当的 C# 解析器(如 Roslyn 或 NRefactory)以外的任何东西都会导致代码非常脆弱。

例如,您将从搜索字符串 void MyMethod() 开始。然后您会发现一种类型具有 void MyMethod( ),因此您将搜索更改为正则表达式 void\s+MyMethod\s*\(\s*\)。然后一些文件将在注释或字符串中包含 void MyMethod(),因此您将编写(不完美地)检测注释和字符串的代码。

一段时间后,您逐渐构建了一个非常原始的 C# 解析器,并且担心接下来需要支持什么样的代码。

如果您从正确的 C# 解析器开始,就不会遇到这些类型的问题。所以,除非那个性能对你来说是完全不能接受的,否则我认为你应该使用它。