c#获取接口方法注释

说我有

interface IFoo { ///  /// Comments about Bar method goes here. ///  void Bar(); } 

我正在使用reflection在运行时显示方法

 MethodInfo[] mis = typeof(IFoo).GetMethods(); 

但我想知道我是否可以获得方法中

包含的评论。 我意识到注释只是忽略了我的编译器,但有什么可以做的来检索注释吗? 现在我有一个单独的文件,有方法和评论,但我讨厌冗余,并想知道是否有任何方法可以做到这一点。

谢谢,

C#编译器csc.exe有一个/ doc选项,用于输出具有三次斜杠注释的外部XML文件。 文档生成器使用此XML文件(例如Sandcastle就是这样做的)。

Visual Studio提供了导出XML注释的相同选项。 要在Visual Studio开发环境中设置此编译器选项:

  1. 打开项目的“属性”页面。 有关详细信息,请参见如何:设置项目属性(C#,J#)。
  2. 单击Build属性页面。
  3. 修改XML Documentation File属性。

您可以使用.NET框架中的XML解析器加载此XML文件,访问其中的类型,并从中获取相关的注释。

你是对的,C#编译器不会将注释编译到元数据中。 但是,Microsoft为导出function创建了三斜杠注释,因此您可以获得它们的句柄。

有关处理XML文件的说明,请参见MSDN 。


例如,我启用了XML输出文件选项并记录了以下方法:

 ///  /// This method parses the given name for /// capitalization. ///  public void ParseStringCase(string name) { // behaviour of method... } 

它在bin /文件夹中的文件中生成以下XML ….

    WindowsFormsApplication3     This method parses the given name for capitalization.     

您还可以创建属性类并以此方式获取信息。 所以你的方法/接口看起来像这样:

  [AttributesTest("Test", "Test comments")] public void Method(object sender, EventArgs e) { //do something here } 

您的属性类将如下所示:

 [AttributeUsage(AttributeTargets.Method)] sealed class AttributesTest : Attribute { public string sName; public string sDescription; public string Name { get { return sName; } set { sName = value; } } public string Description { get { return sDescription; } set { sDescription = value; } } public AttributesTest(string _name, string _desc) { this.Name = _name; this.Description = _desc; } } 

然后,您可以检索每个接口/方法的名称和描述。 您并没有真正收到评论,但它会获得您指定的任何信息。 当我需要获取有关程序中的方法/接口的信息时,我觉得这很有用。 我希望这有帮助!

要添加到John K的答案:无法使用reflection检索注释。 您始终需要一个提供注释的单独文件。 使用编译器中的XML文档文件是最好的方法,因为它是此信息的默认格式。

解决方法 – 将Program.DLL / EXE上的reflection与Program.XML文件一起使用

有关如何实施John K.计划的详细信息,请查看此处