提取类信息
本文关键字:类信息 提取 | 更新日期: 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# 分析器开始,则不会遇到此类问题。所以,除非它的性能对你来说是完全不能接受的,否则我认为你应该使用它。