2009-09-14 6 views
18

Sto usando VS2008 e vorrei creare un avviso/errore di compilazione in base agli attributi personalizzati su una proprietà (se possibile).Generazione di un avviso di compilazione personalizzato C#

ci sono due casi che mi interessano attualmente:

[MyAttribute (typeof(MyClass)] 

Dove MyClass deve implementare un'interfaccia. Attualmente Affermo questo nel costruttore dell'attributo, ma questo non lo rende facile da rintracciare, a causa della natura della traccia dello stack:

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

    } 

Il secondo caso che mi interessa è dove ho un tipo definito in un attributo, se quel tipo implementa un'interfaccia, quindi dovrebbe essere visualizzato un avviso se non è presente un altro attributo.

I.E. if (MyClass.Implements (SomeInterface) & &! exists (SomeAttibute)) {} Generare Attenzione

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

Grazie!

+0

Domanda interessante, io sono curioso di sapere se tale cosa è possibile. +1 –

+0

Interessato pure. –

+0

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

risposta

7

È possibile farlo con PostSharp.

ho una volta fatto, e ha spiegato come farlo here

+0

Grazie mille per quello! Avevo già guardato post nitido prima (per un altro problema) e l'ho deciso contro, ma ora penso che mi rivaluterò;) –

+0

Ho appena scoperto un po 'di problemi - sembra che GetCustomAttributes() non ritorni più l'attributo quando deriva da PostSharp.Laos.OnMethodInvocationAspect piuttosto che System.Attribute –

+0

Significa che restituisce System.Attribute? Non puoi lanciarlo sul tuo attributo? (GetCustomAttributes restituisce sempre un array di System.Attribute AFAIK, quindi devi sempre eseguire il cast penso? –