自定义属性的反射或正则表达式

时间:2012-02-26 14:20:57

标签: c# reflection attributes custom-attributes

我见过Attributes and Reflection,现在我知道如何创建和使用反射来查看属性的元数据,但是有可能创建一个独立的工具来分析cs文件并提取使用的属性?

我想做什么?

基本上我正在开发一个以C# code为输入的工具。下一步是查看该源代码中使用了哪些属性。提取IntrinsicCustom 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是处理运行时的。我不必处理运行时间。只是静态文件分析

2 个答案:

答案 0 :(得分:2)

显然我没有足够的声誉来评论,所以我不得不说这是一个答案。

Reflection处理运行时类型信息。它是一种机制,用于查找程序员不了解的类型的事物(也许其他人正在为您提供代码库,而忘记记录它)。 Reflection将为您提供有关类的公共契约所需的任何信息,包括方法,属性,字段,属性和继承的接口/类。

需要的是解析器。解析器是一种标准编程概念,用于处理文件和提取特定信息。您正在寻找代码文件中的信息,这些信息不是运行时类型,这意味着反射还没有关于它们的信息,但是您有眼睛,因为它们仍然是代码文件。如果你的眼睛不够(因为我怀疑他们不是你问的问题)你需要写一个解析器。从cs文件中提取特定信息非常简单。属性的正则表达式为:\[.+\]

答案 1 :(得分:2)

如果我理解你的问题,你真的需要解析你的代码。 Regex不会帮助您,因为除了解析属性之外,您还需要解析类层次结构。反射可能会起作用,但您无法向用户显示结果。因此,最好的想法是使用任何解析器从源获取表达式树,然后进行调查。

如果您不知道选择哪个解析器 - 我建议使用Rosalyn,因为它最容易解析C#代码(它专门为它设计)。您可以在此处找到解析示例: http://blog.filipekberg.se/2011/10/20/using-roslyn-to-parse-c-code-files/

我认为它应该对您的任务非常强大和有用

相关问题