Я нацелен на.NET 3,5 SP1, и я использую CommentChecker для проверки моей документации XML, все работает хорошо, пока я не добираюсь до класса как это:
///
/// documentation
///
public sealed class MyClass {
///
/// documentation
///
public void Method() {
}
}
В примере выше, как я понимаю, компилятор генерирует конструктора по умолчанию для моего класса. Проблема с этим состоит в том, что CommentChecker генерирует предупреждения, говоря мне, что конструктор пропускает комментарии.
Я пытался изменить программу, чтобы обнаружить этот особый случай и проигнорировать его, но я застреваю, я уже попробовал IsDefined(typeof(CompilerGeneratedAttribute), true)
но это не работало.
Таким образом короче говоря, как я могу обнаружить конструктора по умолчанию с помощью отражения?
Не существует способа обнаружить автоматически созданные конструкторы по умолчанию через метаданные. Вы можете проверить это, создав библиотеку классов с двумя классами, один с явным конструктором по умолчанию, а другой без него. Затем запустите ildasm на сборке: метаданные двух конструкторов идентичны.
Вместо того чтобы пытаться обнаружить сгенерированные конструкторы, я бы просто изменил программу, чтобы разрешить отсутствие документации для любого конструктора по умолчанию. Большинство программ генерации документации, таких как NDoc и SandcastleGUI, имеют опцию добавления стандартной документации ко всем конструкторам по умолчанию; поэтому нет необходимости документировать их вообще. Если в вашем коде есть явный конструктор по умолчанию, вы можете поставить три косые черты (///) над конструктором - больше ничего - чтобы отключить предупреждение Visual Studio об отсутствии документации.
Следующий код вернет информацию о любых конструкторах без параметров в вашем типе:
var info = typeof(MyClass).GetConstructor(new Type[] {});
Я не знаю способа отличить конструктор по умолчанию от явно указанного конструктора без параметров.
Возможным обходным решением для вашей проблемы с CommentChecker было бы явное создание конструктора без параметров там, где он требуется, и соответствующее его комментирование.