Подтвердить что ты не робот

Создание пользовательского времени компиляции С#

Я использую VS2008 и хотел бы создать предупреждение/ошибку времени компиляции на основе пользовательских атрибутов свойства (если это возможно).

В настоящее время меня интересуют два случая:

  [MyAttribute (typeof(MyClass)]

Где MyClass должен реализовать интерфейс. В настоящее время я утверждаю это в конструкторе атрибута, однако это не позволяет легко отслеживать из-за характера трассировки стека:

 public MyAttribute (Type MyClassType)
    {
         System.Diagnostics.Debug.Assert(typeof(MyInterface).IsAssignableFrom(MyClassType),
                                         "Editor must implement interface: " + typeof(MyInterface).Name);

    }

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

т.е. if (MyClass.Implements(SomeInterface) &! Exists (SomeAttibute)) {Генерировать предупреждение}

[MyAttribute(typeof(MyClass)] 
// Comment next line to generate warning
[Foo ("Bar")]

Спасибо!

4b9b3361

Ответ 1

Вы можете сделать это с помощью PostSharp.

Я когда-то это сделал и объяснил, как это сделать здесь