2011-12-05 9 views
13

मैं एक विधि Mono.Cecil गुण है कि मैं जोड़ना चाहते हैं का उपयोग करने के कस्टम विशेषता जोड़ने के बारे में समझ नहीं सकता इस तरह है:mono.cecil का उपयोग कर कस्टम विशेषताओं को जोड़ना?

.custom instance void [mscorlib]System.Diagnostics.DebuggerHiddenAttribute::.ctor() = (01 00 00 00) 

किसी कस्टम विशेषताओं

उत्तर

13
जोड़ने के बारे में पता है

यह वास्तव में बहुत आसान है।

ModuleDefinition module = ...; 
MethodDefinition targetMethod = ...; 
MethodReference attributeConstructor = module.Import(
    typeof(DebuggerHiddenAttribute).GetConstructor(Type.EmptyTypes)); 

targetMethod.CustomAttributes.Add(new CustomAttribute(attributeConstructor)); 
module.Write(...); 
+0

बहुत बहुत धन्यवाद, हल हो गया! उस भयानक पुस्तकालय के विकास के लिए – method

+1

@JbEvain +1। मैंने आपके जीथब में फ़ीड फीड की सदस्यता ली है, इसलिए मुझे वह काम पता है जो अभी भी चरण-दर-चरण – sehe

+0

@ कृपया धन्यवाद शब्द के लिए धन्यवाद! –

3

यह मेरा ले,

MethodDefinition methodDefinition = ...; 
var module = methodDefinition.DeclaringType.Module; 
var attr = module.Import(typeof (System.Diagnostics.DebuggerHiddenAttribute)); 

var attrConstructor = attr.Resolve().Constructors.GetConstructor(false, new Type[] {}); 
methodDefinition.CustomAttributes.Add(new CustomAttribute(attrConstructor)); 

मैंने देखा जेबी Evain की झलकी थोड़ा अलग है। मुझे यकीन नहीं है कि ऐसा इसलिए है क्योंकि वह सेसिल के नए संस्करण का उपयोग कर रहा है या क्योंकि मैं गलत हूं :)

सेसिल के मेरे संस्करण में, ImportTypeReference देता है, कन्स्ट्रक्टर नहीं।

+2

ऐसा इसलिए है क्योंकि मैं गलत था :) मैंने अपना स्निपेट अपडेट किया है। धन्यवाद। –

+0

चीयर्स - मैं 0.5.0 या उससे पहले फंस गया था इसलिए मैं निष्कर्ष पर नहीं पहुंचूंगा :) – sehe

+0

मेरे पास एक अंतिम प्रश्न guyz है: ILProcessor.Append (Instruction.Create (OpCodes.Newarr,)); ऑपरेंड क्या होना चाहिए? , मैं पहले ही एलडीसी निर्देश जोड़ चुका हूं। – method

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