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开发环境中设置此编译器选项:
- 打开项目的“属性”页面。 有关详细信息,请参见如何:设置项目属性(C#,J#)。
- 单击Build属性页面。
- 修改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.计划的详细信息,请查看此处