1
我试图将代码注入到使用Mono.Cecil能Mono.Cecil能写库目标框架3.5 - 写入参考MSCORLIB 4.0
这是应用程序结构
现有装配编译为.NET Framework 3.5的控制台应用程序 - >编译V4.0
- 库,它包装调用单塞西尔 - >编译器v3.5
- 单丝丝 - >编译V3.5(的NuGet版本)
外部组件以被喷射 - >编译V3.5
新修改的组件具有双参考mscorlib程序4.0.0.0和2.0.0.0的mscorlib
我发现这个问题依靠这里,当我添加一个词典<,>构造
const BindingFlags flags = BindingFlags.NonPublic | BindingFlags.Instance;
const MethodAttributes methodAttributes =
MethodAttributes.Public | MethodAttributes.HideBySig | MethodAttributes.SpecialName |
MethodAttributes.RTSpecialName;
var serializableContructor =
typeof(Dictionary<object, object>).GetConstructor(flags, null, new[]
{
typeof (SerializationInfo), typeof (StreamingContext)
}, null);
var serializationConstr = new MethodDefinition(".ctor", methodAttributes, @this.Module.Import(typeof(void)));
serializationConstr.Parameters.Add(new ParameterDefinition(@this.Module.Import(typeof(SerializationInfo))));
serializationConstr.Parameters.Add(new ParameterDefinition(@this.Module.Import(typeof(StreamingContext))));
serializationConstr.Body.Instructions.Add(Instruction.Create(OpCodes.Ldarg_0));
serializationConstr.Body.Instructions.Add(Instruction.Create(OpCodes.Ldarg_1));
serializationConstr.Body.Instructions.Add(Instruction.Create(OpCodes.Ldarg_2));
serializationConstr.Body.Instructions.Add(Instruction.Create(OpCodes.Call, @this.Module.Import(serializableContructor)));
serializationConstr.Body.Instructions.Add(Instruction.Create(OpCodes.Nop));
serializationConstr.Body.Instructions.Add(Instruction.Create(OpCodes.Nop));
serializationConstr.Body.Instructions.Add(Instruction.Create(OpCodes.Ret));
@this.Methods.Add(serializationConstr);
typeof(字典<,>)返回一个引用mscorlib的类型4.0.0.0
我做错了什么?
感谢您的回复。我不知道如何实现这一点。你的意思是我应该直接加载适当的mscorlib,然后搜索字典<,>在MainModule类型中的TypeDefinition? – codingadventures 2013-03-25 00:30:38