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