Пользовательский устаревший атрибут C#
мне было интересно, можно ли создать пользовательский устаревший класс. Мне это нужно, и я ненавижу тот факт, что устаревший показывает это предупреждение до моего ввода: что-то устарело:. Я просто хочу дать предупреждение / ошибку, когда я использую поле / метод только с моим вводом, например:
[CustomObsolete("Hello")]
public int i = 0;
даст предупреждение / отладка Привет.
это возможно? Если я использую #warning / #error, он всегда будет отображаться ошибка / предупреждение.
3 ответов
нет, ObsoleteAttribute
эффективно жестко закодирован в компилятор C# - нет никакого способа создать свой собственный атрибут, который компилятор C# будет понимать как указывающий, что член устарел.
лично я бы просто пошел с ObsoleteAttribute
- Это правда это плохо, что сообщение об ошибке начинается с "X устарело"?
один из способов достичь того, что вы хотите, будет custom post-build task
. После компиляции проекта Пусть другая созданная вами программа загрузит эту сборку и проанализирует ее для вашего атрибута. Затем вы можете вывести сообщение, которое вы палочка и что-то еще. Но вывод точного номера строки и файла, где используется этот атрибут, будет сложной задачей, потому что для этого вам придется проанализировать файл pdb (и будет работать только в режиме отладки должным образом).
вам лучше просто придерживаться Obsolete
атрибут .Сеть. : -)
вы можете использовать только устаревшие
Ошибка
[Obsolete("Hello", true)]
public String foo() {
return "bar";
}
и с предупреждением
[Obsolete("Hello", false)]
public String foo() {
return "bar";
}