Método de importación utilizando Mono.Cecil.

Ayúdame por favor con el método de importación. Quiero tejer el ensamblaje e inyectar la referencia de llamada de método de la clase base definida en el otro ensamblaje (de hecho, es el ensamblaje donde se define el código de tejido).

private void InsertCallSetReference()
{
    //Get the load instruction to replace
    var ilProcessor = Property.SetMethod.Body.GetILProcessor();
    var argumentLoadInstructions = ilProcessor.Body.Instructions.ToList();

    MethodReference methodReference = ImportMethod("SetReference");

    foreach (var instruction in argumentLoadInstructions)
    {
        if (instruction.OpCode == OpCodes.Stfld)
        {
            ilProcessor.InsertAfter(instruction, ilProcessor.Create(OpCodes.Call, methodReference));
            ilProcessor.InsertAfter(instruction, ilProcessor.Create(OpCodes.Ldarg_1));
            ilProcessor.InsertAfter(instruction, ilProcessor.Create(OpCodes.Ldstr, DBFieldName));
            ilProcessor.InsertAfter(instruction, ilProcessor.Create(OpCodes.Ldarg_0));
            ilProcessor.Remove(instruction);
            break;
        }
    }
}

El código de importación del método funciona bien y devuelve la referencia del método

private MethodReference ImportMethod(string name)
{
     var type = MongoConnectModule.Import(typeof(BaseDataObject));
     return MongoConnectModule.Import(type.Resolve().Methods.First(m => m.Name == name));
}

Pero después de que AssemblyDefinition Write Call, me lanza un error:

C: \ dev \ MongoConnect \ WeavingTaskTest \ Weaving \ CodeWeaving.targets (32,5): error MSB4018: System.ArgumentException: Member 'System.Void MongoConnect.BaseDataObject :: SetProperty (System.String, System.Object)' está declarado en otro módulo y necesita ser importado

_assemblyDefinition.Write(_assemblyPath, new WriterParameters() { WriteSymbols = true, SymbolWriterProvider = debugWriterProvider });

¿Alguna idea de cómo podría hacer eso?

Respuestas a la pregunta(1)

Su respuesta a la pregunta