AttributeUsageAttribute
, по-видимому, является ключевой особенностью языка, поэтому это ограничение предписано C# спецификацией :
Классом, который украшен Атрибут AttributeUsage
должен быть производным от System.Attribute
, прямо или косвенно. В противном случае возникает ошибка времени компиляции.
Это означает, что не существует прямого способа достижения такого ограничения. Вы можете написать собственный анализатор stati c для выдачи предупреждений при ошибочном использовании или посмотреть ответ Антона Анпилогова для обходного пути.