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