自定义属性上的反射或Regex
本文关键字:Regex 反射 自定义属性 | 更新日期: 2023-09-27 18:26:01
我看过属性和反射,现在我知道如何创建和使用反射来查看属性的元数据,但是否可以制作一个独立的工具来分析cs
文件并提取所使用的属性?
我想做什么
基本上,我正在开发一个以C# code
为输入的工具。下一步是查看源代码中使用了哪些Attributes。提取Intrinsic
和Custom Attributes
。
问题
如果您在定义attributes
的同一项目中使用reflection
,但I do not know in what direction I should move
编写了一个单独的工具,可以为您提供上述提取的静态和属性元数据,那么这是有意义的。
有些人说我应该使用Regex
来提取文件中的属性,而另一些人则说我需要使用Irony-.NET语言实现工具包
此外
以上工作将使我拥有一个应用程序,该应用程序将用于Source Code
中的attributes(annotation) based Design Pattern Recovery
。我不太清楚是Regex
会来救援,还是我需要Reflection
这样的东西。正如反射处理运行时一样。我不必处理运行时间。仅静态文件分析
如果我正确理解了您的问题,那么您确实需要解析代码。Regex对您没有帮助,因为除了解析属性之外,您还需要解析类层次结构。反射可能会起作用,但您无法向用户显示结果。因此,最好的想法是使用任何解析器从源代码中获取表达式树,然后对其进行研究
如果你不知道该选择哪个解析器,我推荐Rosalyn,因为它应该是解析C#代码最容易的(它是专门为它设计的)。您可以在此处找到解析示例:http://blog.filipekberg.se/2011/10/20/using-roslyn-to-parse-c-code-files/
我认为它应该非常强大,对您的任务
显然我没有足够的声誉发表评论,所以我不得不说这是一个答案。
反射处理运行时类型信息。它是一种机制,可以找出程序员不知道的类型(也许其他人正在为您提供代码库,却忘记了记录它)。反射将为您提供有关类的公共约定所需的任何信息,包括方法、属性、字段、属性和继承的接口/类。
不过,您需要的是一个解析器。解析器是一种标准编程概念,用于处理文件并提取特定信息。你在代码文件中寻找信息,这些文件还不是运行时类型,这意味着反射还没有关于它们的信息,但你有你的眼睛,因为它们仍然是代码文件。如果你的眼睛不够(如果你问这个问题,我怀疑他们不够),你需要写一个解析器。从cs文件中提取特定信息非常简单。属性的正则表达式为:'[.+']