मैं देख रहे हैं, एक विधि है कि एक System.Lazy को दर्शाता है फेंकना करने की कोशिश कर रहा हूँ और लाइन newobj instance void class [mscorlib]System.Lazy`1<class Example.ExpensiveType>::.ctor(class [mscorlib]System.Func`1<class Example.ExpensiveType>)
उत्सर्जन Mono.Cecil
पर "अमान्य टोकन" का एक PEVerify त्रुटि के साथ विफल साथ System.Lazy
newobj instance void class [mscorlib]System.Lazy`1<class Example.IHeater>::.ctor(class [mscorlib]System.Func`1<!0>)
दुर्भाग्य से, मैं कैसे Mono.Cecil एपीआई के साथ इस पुन: पेश करने के लिए के रूप में एक नुकसान में हूँ। क्या कोई जेनेरिक के साथ मदद कर सकता है?
यहाँ मैं अब तक है:
var get = new MethodDefinition(
"Get",
MethodAttributes.Public | MethodAttributes.HideBySig | MethodAttributes.Virtual,
ModuleDefinition.TypeSystem.Object);
var funcType = new GenericInstanceType(ImportedTypes.FuncOfT);
funcType.GenericArguments.Add(lazyElementType);
var funcTypeCtor = new MethodReference(".ctor", ModuleDefinition.TypeSystem.Void, funcType);
funcTypeCtor.Parameters.Add(new ParameterDefinition(ModuleDefinition.TypeSystem.Object));
funcTypeCtor.Parameters.Add(new ParameterDefinition(ModuleDefinition.TypeSystem.IntPtr));
funcTypeCtor.HasThis = true;
funcTypeCtor = ModuleDefinition.Import(funcTypeCtor);
var lazyTypeCtor = new MethodReference(".ctor", ModuleDefinition.TypeSystem.Void, lazyType);
var parameterDefinition = new ParameterDefinition(funcType);
lazyTypeCtor.Parameters.Add(parameterDefinition);
lazyTypeCtor.HasThis = true;
lazyTypeCtor = ModuleDefinition.Import(lazyTypeCtor);
il = get.Body.GetILProcessor();
il.Emit(OpCodes.Ldarg_0);
il.Emit(OpCodes.Ldftn, getTypedValue);
il.Emit(OpCodes.Newobj, funcTypeCtor);
il.Emit(OpCodes.Newobj, lazyTypeCtor); // This leads to the invalid token
il.Emit(OpCodes.Ret);
lazyBinding.Methods.Add(get);
किसी भी मदद की बहुत सराहना की जाएगी - मैं स्टंप्डया रहा हूँ!