Пользовательский устаревший атрибут 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";
    }