Я пытаюсь внедрить код в существующей сборке, скомпилированные для .NET Framework 3.5 с помощью Mono.CecilMono.Cecil написать библиотеки Target Framework 3.5 - пишет ссылку на mscorlib 4.0
Это структура приложения
- Console Application
-> компилируется v4.0
- библиотека, которая заворачивает вызовы Mono Cecil -> компилируется v3.5
- Моно Cecil -> скомпилирован 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, а затем искать словарь <,> TypeDefinition в пределах типов MainModule? – codingadventures