提取类信息

本文关键字:类信息 提取 | 更新日期: 2023-09-27 18:35:34

我需要为我的代码创建某种文档。为此,我必须从几百个 C# 类中提取信息。

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

MyMethod()
{
..some code..
switch (variable)
    case "A":
          break;
    case "B":
          break;
..some other code..
}

我所需要的只是查找MyMethod中的开关情况并提取case值。

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

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

还有其他方便的方法来提取信息并生成此文档吗?

提取类信息

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

当然,如果你要走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# 分析器开始,则不会遇到此类问题。所以,除非它的性能对你来说是完全不能接受的,否则我认为你应该使用它。