2009-09-14 13 views
18

Estoy usando VS2008 y me gustaría crear un error/advertencia de tiempo de compilación en función de los atributos personalizados en una propiedad (si es posible).Generando una advertencia de tiempo de compilación personalizada C#

Hay dos casos que me interesan actualmente:

[MyAttribute (typeof(MyClass)] 

miclase tiene que implementar una interfaz. Actualmente Afirmo esto en el constructor del atributo, sin embargo, esto no significa que sea fácil de localizar, debido a la naturaleza de la traza de la pila:

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

    } 

El segundo caso que me interesa es donde tengo una tipo definido en un atributo, si ese tipo implementa una interfaz, se debe mostrar una advertencia si no hay otro atributo presente.

I.E. si (MyClass.Implements (SomeInterface) & &! existe (SomeAttibute)) {} Generar Advertencia

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

Gracias!

+0

Interesante pregunta, tengo curiosidad si tal cosa es posible. +1 –

+0

Interesado también. –

+0

http://stackoverflow.com/questions/154109/custom-compiler-warnings –

Respuesta

7

Puede hacerlo con PostSharp.

una vez que lo he hecho, y explicó cómo hacerlo here

+0

¡Muchas gracias por eso! Había revisado la publicación antes (para otro problema) y decidí no hacerlo, sin embargo, ahora creo que voy a volver a evaluar;) –

+0

Acabo de descubrir un problema: parece que GetCustomAttributes() ya no está de vuelta. el atributo cuando se deriva de PostSharp.Laos.OnMethodInvocationAspect en lugar de System.Attribute –

+0

¿Quiere decir que devuelve System.Attribute? ¿No puedes lanzarlo a tu propio atributo? (GetCustomAttributes siempre devuelve una matriz de System.Attribute AFAIK, por lo que siempre tiene que emitir creo? –

Cuestiones relacionadas