Как создать ошибку компилятора на основе атрибута, отсутствующего в C #? - PullRequest
2 голосов
/ 06 мая 2010

Я создаю ряд надстроек для Revit Structure API. Каждый инструмент должен иметь класс, который реализует интерфейс IExternalCommand.

В последней версии Revit для работы вашего инструмента необходимо иметь два атрибута в классе, который реализует этот интерфейс:

[Регенерация (RegenerationOption.Manual)] [Транзакция (TransactionMode.Automatic)]

Значения в скобках могут меняться, но там должно быть что-то. Часто я забываю надеть атрибуты, затем, когда дело доходит до времени выполнения, происходит сбой. Есть ли способ в Visual Studio 2010 добавить предупреждение компилятора или ошибку, говорящую, что если ваш класс реализует этот интерфейс, он должен иметь эти 2 атрибута? У меня есть резарпер, если это поможет.

Кто-нибудь может указать мне правильное направление?

Ответы [ 2 ]

4 голосов
/ 06 мая 2010

К сожалению нет. (Хотя я не знаю насчет Решарпера)

Если у вас VS2010 Ultimate, вы можете написать собственное правило анализа кода.

2 голосов
/ 06 мая 2010

Не во время компиляции, но я думаю, что было бы легко с отражением.

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

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

...