2009-09-14 24 views
18

VS2008 kullanıyorum ve bir özellikteki özel özniteliklere dayalı olarak bir derleme zamanı uyarısı/hatası oluşturmak istiyorum (eğer mümkünse). Sınıfım bir arabirim uygulamak zorundadırÖzel bir derleme zamanı uyarısı oluşturma C#

[MyAttribute (typeof(MyClass)] 

:

iki durum şu anda ilgi beni vardır.

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

    } 

beni ilgilendiren ikinci vaka Ben sahip olduğu edilmektedir: Şu anda ancak bu kolay dolayı yığın izleme doğası gereği, izini yapmaz, özelliğin yapıcı bu iddia Bir öznitelikte tanımlanan tür, bu tür bir arabirim uygularsa, başka bir özellik yoksa, bir uyarı görüntülenmelidir.

I.E. (& &! (SomeAttibute) Var MyClass.Implements (SomeInterface)) eğer

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

Teşekkür {Uyarı oluştur}!

+0

İlginç soruyu nasıl izah ettik

, ben böyle bir şey mümkün olup olmadığını merak ediyorum. +1 –

+0

İlgilenen. –

+0

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

cevap

7

Bunu PostSharp ile yapabilirsiniz. Bir kez yapılır ve bunu here

+0

Bunun için çok teşekkürler! Ben daha önce keskin (başka bir sorun için) daha önce baktım ve buna karşı karar verdim, ancak şimdi yeniden değerlendiriyor olacağım düşünüyorum;) –

+0

Sadece biraz sorun keşfettim - GetCustomAttributes() artık geri döndü gibi görünüyor System.Attribute –

+0

yerine PostSharp.Laos.OnMethodInvocationAspect türetildikten sonra bu özellik System.Attribute döndürür? Bunu kendi öznitelikinize göre yapamaz mısın? (GetCustomAttributes her zaman bir dizi System.Attribute AFAIK döndürür, bu yüzden ben her zaman döküm düşünmek zorunda? –

İlgili konular