Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/311.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 是否可以在运行时获取类摘要?_C#_Reflection_Class_Comments_Summary - Fatal编程技术网

C# 是否可以在运行时获取类摘要?

C# 是否可以在运行时获取类摘要?,c#,reflection,class,comments,summary,C#,Reflection,Class,Comments,Summary,是否可以在运行时用C#获取类摘要? 我想通过反思获得课堂总结,然后将其写入控制台。 我所说的课堂总结是指课堂定义前的总结评论,类似这样: /// <summary> /// some description /// </summary> class SomeClass { } // ///一些描述 /// 上课 { } 我不知道编译代码后这些注释是否可用,但如果可用,可能有一种方法可以在代码中获得它们 提前感谢您的帮助。如果您发出XML文档文件,您可以。该过程将涉及

是否可以在运行时用C#获取类摘要? 我想通过反思获得课堂总结,然后将其写入控制台。 我所说的课堂总结是指课堂定义前的总结评论,类似这样:

/// <summary>
/// some description
/// </summary>
class SomeClass
{
}
//
///一些描述
/// 
上课
{
}
我不知道编译代码后这些注释是否可用,但如果可用,可能有一种方法可以在代码中获得它们


提前感谢您的帮助。

如果您发出XML文档文件,您可以。该过程将涉及使用反射获取该类型的所有公共成员,然后使用XPath从生成的XML文档中读取文档


更新:要在dll/exe中包含XML文档,只需将其作为嵌入资源添加,并在文档更改时编译两次。

不,它们无法通过反射使用。见:

XML文档注释不是元数据; 它们不包括在已编译的文档中 组件,因此它们不是 可通过反射获得


不,这些注释不包括在编译的程序集中


Visual Studio可以在输出文件夹(\bin\your\u project.xml)中创建一个.xml文件,其中包含这些注释。如果应用程序与该xml文件一起分发,则您可以通过编程方式访问它。

您无法在运行时访问这些文件,因为这些文件被编译器视为注释

但是,如果您想使用属性来指定信息并在运行时通过反射来访问它,您可以这样做

有关属性创建和运行时访问的信息,请参见

MSDN中的示例:

Author.cs:

public class Author : System.Attribute
{
    private string name;
    public double version;

    public Author(string name)
    {
        this.name = name;
        version = 1.0;
    }
}
SampleClass.cs:

[Author("H. Ackerman", version = 1.1)]
class SampleClass
{
    // H. Ackerman's code goes here...
}

不久前我曾经搞砸了这个,用了这个男人的解决方案。效果相当不错:

我在CodePlex上维护该项目,并实现了执行此任务的功能。有关更多信息,请参阅图书馆


本质上,该库允许您使用
System.Reflection
中的元数据类型(即
MethodInfo
PropertyInfo
等)以编程方式查找和查询程序集的XML文档注释文件.

详细说明一下您的答案:这个解决方案实际上是一个解决方案,它可以虚拟地链接到生成的xml文档。因此,它适用于您自己的代码以及大多数第三方LIB(OSS和商业)。但在某些情况下,您无法获取xml文档,因此通常不可能获取;如果链接在将来消亡,使这个答案变得无用,那将是不幸的——特别是因为它是公认的答案。这是一个解决方案,但是如果你使用它,你必须写两次你的帮助。如果要在intellicense上阅读,请在属性中选择一个,在摘要中选择另一个:(+1)对于这个解决方案,我做了一个读取xml的clase。如果你错过了一个公共方法的注释,它会被警告,这样你就不会错过它。