【问题标题】:.Net reflection to get description of class / property etc?.Net 反射来获取类/属性等的描述?
【发布时间】:2010-04-14 16:00:38
【问题描述】:

我知道这不太可能,但我想知道是否有任何方法可以获得类或属性的 cmets(即 ''' 之后的位)..?我已经设法使用 PropertyInfo 类获取了一个类的属性列表,但我找不到获取 cmets / 描述的方法。我需要它作为我为我的站点管理员编写的指南 - 它会很棒如果添加了新属性,它是否可以自动更新,因此无需担心将来更新太多。有人知道怎么做吗?提前致谢。

问候,

理查德

【问题讨论】:

  • 顺便说一下,我的意思是在编译和部署时获取描述,如果有影响的话。
  • 我现在找到了另一种解决方法.. 不知道为什么我以前没有想到它 - 它是如此明显.. 基本上它是一个目录。目录有一个管理前端,有一个指南告诉用户什么是什么(即如何创建一个项目,每个属性的用途等等)。显而易见的方法是创建一个名为 Attribute 的新类- 这包含 Description 等的属性,然后是 StringAttribute、BooleanAttribute 等的其他类。这些项目现在需要包含属性类实例的属性。简单!

标签: .net asp.net vb.net reflection


【解决方案1】:

可以使用property属性来装饰属性,使用反射读取属性中的数据:


[Description('This is my property description')]
public String MyStringProp { get; set; }

然后使用

FieldInfo.GetCustomAttributes
阅读说明。

【讨论】:

  • 嘿,是的,这看起来像是一个更可行的解决方案,只要您可以定义许多自定义属性(即描述、必需、正则表达式,用于验证它的格式是否正确并且字符串是正确的长度等等)..这是自定义属性的可接受用途吗??
  • 如果您只是将数据用于文档,那么当然可以。它仍然会使你的班级膨胀,但它确实增加了价值。如果这些要从代码中定期使用,我建议不要这样做。这是创建属性的参考。您可以根据需要创建任意数量:msdn.microsoft.com/en-us/library/sw480ze8%28VS.80%29.aspx
  • hmm 它似乎在 VB 中不可用,或者没有可用的示例(引用 msdn)。我创建了一个名为 DevDescription 的类,它将描述作为字符串和布尔值是否这是必需的。我已经为此使用 _ 设置了自定义属性 - 但是我无法找到一种方法..
  • 我想我可能已经明白了 - 我现在让它输出一个属性名称和描述的列表!感谢您的帮助..
【解决方案2】:

我想你说的是 XML cmets,对吧?

在这种情况下,有一些第三方工具可以将它们转换成各种格式,包括编译的帮助文件和完全 MSDN 风格的网站。

Jon Skeet 上周刚刚发布了一篇关于此的博客:
http://msmvps.com/blogs/jon_skeet/archive/2010/04/10/documentation-with-sandcastle-a-notebook.aspx

【讨论】:

  • 我的意思是你在一行上放了 3 次 "'" 的 cmets,然后视觉 Web 开发人员在同一个地方放了很多额外的行,例如 .. 我认为他们是 xml cmets 所以是的,我认为我们在谈论同一件事.. 谢谢。
【解决方案3】:

一旦编译了一个类,doc cmets 早就不复存在了。如果您使用/doc switch 进行编译,您将获得一个包含它们的 XML 文件,尽管您可以使用它。

【讨论】:

    【解决方案4】:

    不,你不能使用反射来做到这一点。

    您可以做的是配置 Visual Studio(或您使用的任何构建过程)以在构建时创建一个包含 cmets 的 XML 文件,然后您可以分发该文件。

    【讨论】:

      【解决方案5】:

      您无法通过反射访问普通 cmets。
      但是,如果您使用xml-comments(我认为这是在 VB ''' 中),则可以创建一个文档文件(在我的 C# 项目中的项目属性 -> 构建 -> 输出路径/xml 文档文件下),您可以访问它。但你不需要为此反思。

      Herehere是VBasic中对xml cmets的一些描述。

      【讨论】:

        猜你喜欢
        • 2015-01-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-01-23
        • 2011-06-28
        • 1970-01-01
        相关资源
        最近更新 更多