С# получать комментарии метода интерфейса
Скажем, у меня
interface IFoo
{
/// <summary>
/// Comments about Bar method goes here.
/// </summary>
void Bar();
}
Я использую отражение для отображения методов во время выполнения
MethodInfo[] mis = typeof(IFoo).GetMethods();
но мне было интересно, могу ли я получить комментарии, включенные в <summary> </summary>
для этих методов. Я понимаю, что комментарии просто игнорируются моим компилятором, но есть ли что-нибудь, что можно было бы сделать для получения комментариев? Прямо сейчас у меня есть отдельный файл, в котором есть методы и комментарии, но я ненавижу избыточность и задаюсь вопросом, есть ли способ сделать это.
Спасибо,
Ответы
Ответ 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
Подробнее о том, как реализовать план Джона К., смотрите здесь