c # получение комментариев метода интерфейса - PullRequest
18 голосов
/ 02 мая 2011

Скажите, у меня есть

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

Я использую отражение для отображения методов во время выполнения

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

но мне было интересно, смогу ли я получить комментарии, включенные в <summary> </summary> для методов. Я понимаю, что комментарии просто игнорируются моим компилятором, но можно ли что-нибудь сделать для получения комментариев? Прямо сейчас у меня есть отдельный файл, содержащий методы и комментарии, но я ненавижу избыточность и задавался вопросом, есть ли способ сделать это.

Спасибо

Ответы [ 4 ]

15 голосов
/ 02 мая 2011

Компилятор C # csc.exe имеет параметр / doc , который выводит внешний XML-файл с комментариями с тройным слешем.Этот XML-файл используется генераторами документации (например, Sandcastle делает подобные вещи).

Эта же опция экспорта комментариев XML доступна в Visual Studio.Чтобы установить этот параметр компилятора в среде разработки Visual Studio:

  1. Откройте страницу свойств проекта.Подробности см. В разделе Как установить свойства проекта (C #, J #).
  2. Щелкните страницу свойств сборки.
  3. Измените свойство файла документации XML.

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

Вы правы, компилятор C # не компилирует комментарии в метаданные.Однако Microsoft создала комментарии с тройной косой чертой для возможности экспорта, так что вы можете получить к ним доступ.

Инструкции по обработке файла XML находятся здесь, на MSDN .


В качестве примера я включил опцию файла вывода XML и задокументировал следующий метод:

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

Создает следующий XML-файл в файле в папке bin / .... .... 1029 *

<?xml version="1.0"?>
<doc>
    <assembly>
        <name>WindowsFormsApplication3</name>
    </assembly>
    <members>
        <member name="M:WindowsFormsApplication3.Form1.ParseStringCase(System.String)">
            <summary>
            This method parses the given name for
            capitalization.
            </summary>
        </member>
    </members>
</doc>
7 голосов
/ 02 мая 2011

Вы также можете создать класс атрибутов и получить информацию таким образом.Таким образом, ваш метод / интерфейс будет выглядеть так:

 [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;
    }
  }

Затем вы можете получить Имя и Описание для каждого интерфейса / метода.Вы на самом деле не получаете комментарии, но он получит любую информацию, которую вы укажете.Я нахожу это полезным, когда мне нужно получить информацию о методе / интерфейсе в моих программах.Надеюсь, это поможет!

4 голосов
/ 02 мая 2011

Добавить к ответу Джона К. Невозможно получить комментарии, используя отражение. Вам всегда нужен отдельный файл с комментариями. Лучше всего использовать файл документа XML из компилятора, потому что это формат по умолчанию для этой информации.

1 голос
/ 27 декабря 2013

Обходной путь - Использование отражения в Program.DLL / EXE вместе с файлом Program.XML

Для получения подробной информации о том, как реализовать план Джона К., смотрите здесь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...