Подтвердить что ты не робот

С# получать комментарии метода интерфейса

Скажем, у меня

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

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

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

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

Спасибо,

4b9b3361

Ответ 1

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

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

  • Откройте страницу свойств проекта. Дополнительные сведения см. В разделе Практическое руководство. Настройка свойств проекта (С#, J #).
  • Перейдите на страницу свойств Build.
  • Измените свойство файла документации XML.

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

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

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


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

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

Он создает следующий XML файл в файле bin/folder....

<?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>

Ответ 2

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

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

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

Ответ 3

Чтобы добавить к John K ответ: невозможно получить комментарии с помощью отражения. Вам всегда нужен отдельный файл с комментариями. Использование файла документа XML из компилятора является наилучшим способом, поскольку это формат по умолчанию для этой информации.

Ответ 4

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

Подробнее о том, как реализовать план Джона К., смотрите здесь