Добавление ObsoleteAttribute в (или иначе greylisting) Типы, которые не под моим контролем?

Есть ли способ каким-либо образом отмечать типы, которые я не контролирую как устаревшие? В основном я хотел бы добавить ObsoleteAttribute к типам, которые я не хочу использовать в моем проекте .net(т.е. SerializableAttribute)

Я считаю, что могу сделать что-то подобное с FxCop, но в идеале я хотел бы, чтобы компилятор уже генерировал предупреждения для "greylisted" Types?

Это должно быть на уровне Per-Project, но, к сожалению, "Атрибуты расширения" не существуют, и добавление их в Runtime слишком поздно для ObsoleteAttribute...

Изменить:. Чтобы уточнить, я не хочу блокировать типы использования (помните, что ObsoleteAttribute по умолчанию генерирует предупреждение, а не ошибку!), я просто хочу генерировать предупреждения когда они используются, как в 99% случаев, неправильно использовать их (т.е. SerializableAttribute). Кроме того, я имею в виду не только типы .net, но и некоторые типы сторонних производителей. Это больше напоминание. Я предполагаю, что FxCop это лучший выбор.

2 ответа

Нет прямого способа сделать это; FxCop будет вашим лучшим выбором. Однако вы можете проявить творческий подход и повторно объявить тип. Caveat: это изворотливый изворотливый! Но это сработает:

namespace System.Text { [Obsolete("Pah; who wants performance...", true)] public class StringBuilder { }
}

Это так противно! Но требуется extern alias, чтобы обойти. Это может также обезьяна с некоторым строковым отражением (Activator.CreateInstance), конечно.


Нет, и я понимаю. Поскольку они не находятся под вашим контролем, вы не имеете права их устаревать;) Так сказать.

FxCop тоже не может этого сделать. xCop может сказать, используете ли вы его, но это не то же самое, что добавлять к ним устаревший атрибут.

Я всерьез думаю, что вся идея типов "Я не хочу использовать в моем проекте .net" довольно вышла из-за того, что вам нужно будет сделать TON работы без результата. Типы, которые не полезны, не используются по определению (если вам не нравится включать материал, который вам действительно не нужен). Обход их ничего не достигает.

И вы можете быть удивлены... может быть, однажды вам понадобятся некоторые из них.

Никогда не было в проекте, где этот подход был сделан.

licensed under cc by-sa 3.0 with attribution.