2009-02-26 2 views
17

Можно ли получить сводку класса во время выполнения на C#? Я хотел бы получить резюме класса через отражение, а затем записать его на консоль. По описанию класса я имею в виду краткие комментарии перед определением класса, что-то вроде этого:Можно ли получить сводку класса во время выполнения?

/// <summary> 
/// some description 
/// </summary> 
class SomeClass 
{ 
} 

Я не знаю, если эти комментарии будут доступны после компиляции кода, но если они, возможно, есть способ их получения в коде.

Заранее благодарим за помощь.

ответ

6

я когда-то перепутались с этим некоторое время назад, и использовали это решение ребята. Работали очень хорошо:

http://jimblackler.net/blog/?p=49

+0

Это также сработало для меня. – empi

+2

Чтобы немного откликнуться, это решение фактически делает обходной путь, фактически связанный с созданным XML-документом. Таким образом, он работает как с вашим собственным кодом, так и с большинством сторонних библиотек (OSS и коммерческий). Но есть некоторые случаи, когда вы не можете получить документ xml, и это, как правило, не представляется возможным. – mbx

+1

Просьба указать относительные сведения о вашей ссылке, было бы несчастливо, если бы ссылка умерла в будущем, делая этот ответ бесполезным - тем более, что это принятый ответ. – Rob

1

Вы можете, если испустить файл документации XML. Этот процесс включает использование рефлексии для получения всех публичных членов типа, а затем с использованием XPath, чтения документации из сгенерированного XML-документа.

UPDATE: чтобы включить XML-документ в вашу dll/exe, просто добавьте его как встроенный ресурс и дважды скомпилируйте, если документация изменится.

+0

+1 для этого решения. Я сделал clase, который читает xml. Также хорошо, что если вы пропустите комментарий к публичному методу, его предупреждают, чтобы вы не пропустили его. – Yogurtu

3

Нет, они не доступны через отражение. См. msdn:

Замечания XML doc не являются метаданными; они не включены в сборку , и поэтому они не являются доступными через отражение.

0

Нет, эти комментарии не включены в сборку сборки.

Visual Studio может создать XML-файл в выходной папке (\ bin \ your_project.xml), содержащей эти комментарии. Если ваше приложение было распространено с этим файлом xml, вы сможете получить доступ к нему программно.

3

Вы не можете получить доступ к ним во время выполнения, поскольку они считаются комментариями компилятора.

Однако, если вы хотите использовать Атрибут для указания информации и доступа к ней во время выполнения через отражение, вы можете это сделать.

Для создания атрибутов см. Creating Custom Attributes (C# Programming Guide) и Accessing Attributes With Reflection (C# Programming Guide) для доступа во время выполнения.

Пример из 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... 
} 
+0

Это решение, но если вы его используете, вы должны дважды написать свою помощь. Один в атрибуте и прочее в сводке, если вы хотите прочитать его на intellicense. :( – Yogurtu

5

Я поддерживать Jolt.NET проект CodePlex и реализовали функцию, которая выполняет эту самую задачу. Для получения дополнительной информации обратитесь к библиотеке Jolt.

По сути, библиотека позволяет программно находить и запрашивать файл комментариев doc XML для сборки, используя типы метаданных в System.Reflection (т. Е.MethodInfo, PropertyInfo, и т.п ...).

Смежные вопросы