2009-09-14 9 views
18

मैं वीएस 2008 का उपयोग कर रहा हूं और किसी संपत्ति पर कस्टम विशेषताओं (यदि यह संभव हो) पर आधारित संकलन समय चेतावनी/त्रुटि बनाना चाहता है।एक कस्टम संकलन समय चेतावनी उत्पन्न करना सी #

[MyAttribute (typeof(MyClass)] 

कहाँ MyClass एक इंटरफ़ेस को लागू करने की है:

दो मामलों जो ब्याज मुझे वर्तमान में कर रहे हैं। वर्तमान में मैं विशेषता के निर्माता में इस पर जोर है, लेकिन इस आसान स्टैक ट्रेस की प्रकृति के कारण नीचे ट्रैक करने के लिए, नहीं है:

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

    } 

दूसरे मामले जो मुझे दिलचस्पी जहां मैं एक है है एक विशेषता में परिभाषित प्रकार, यदि वह प्रकार एक इंटरफ़ेस लागू करता है, तो कोई अन्य विशेषता मौजूद नहीं होने पर चेतावनी प्रदर्शित की जानी चाहिए।

आईई। अगर (MyClass.Implements (SomeInterface) & &! मौजूद है (SomeAttibute)) {चेतावनी उत्पन्न}

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

धन्यवाद!

+0

दिलचस्प सवाल कैसे करना बताया गया है, मैं उत्सुक अगर इस तरह बात संभव है हूँ। +1 –

+0

भी रुचि रखते हैं। –

+0

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

उत्तर

7

आप PostSharp के साथ ऐसा कर सकते हैं।

मैं एक बार यह किया है, और यह here

+0

इसके लिए बहुत बहुत धन्यवाद! मैंने पहले पोस्ट (तेज समस्या के लिए) पर देखा था और इसके खिलाफ फैसला किया था, हालांकि अब मुझे लगता है कि मैं फिर से मूल्यांकन करूँगा;) –

+0

मैंने अभी कुछ समस्या खोज ली है - ऐसा लगता है कि GetCustomAttributes() अब रिटर्न नहीं करता है जब यह PostSharp.Laos.OnMethodInvocationAspect से प्राप्त होता है तो यह विशेषता सिस्टम के बजाय होती है। एट्रिब्यूट –

+0

आपका मतलब है कि यह System.Attribute देता है? क्या आप इसे अपनी खुद की विशेषता में नहीं डाल सकते? (GetCustomAttributes हमेशा सिस्टम की एक सरणी देता है। एटीएआईकेई एटैक, तो आपको हमेशा मुझे लगता है कि मुझे लगता है? –

संबंधित मुद्दे