Aidez-moi s'il vous plaît avec l'importation de la méthode. Je veux tisser l'assemblage et injecter la référence d'appel de la méthode de la classe de base définie dans l'autre assemblage (en fait, c'est l'assemblage où le code de tissage est défini).
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;
}
}
}
Le code d'importation de la méthode fonctionne très bien et renvoie la référence de la méthode
private MethodReference ImportMethod(string name)
{
var type = MongoConnectModule.Import(typeof(BaseDataObject));
return MongoConnectModule.Import(type.Resolve().Methods.First(m => m.Name == name));
}
Mais après AssemblyDefinition, écrivez, appelez, cela me lance une erreur:
C: dev mongoconnect wavavingtasktest waving codewaving.targets (32,5): error msb4018: System.argumentException: membre 'System.Void Mongoconnect.BaseDataObject :: setProperty (System.String, System.Object)' est déclaré dans un autre module et doit être importé
_assemblyDefinition.Write(_assemblyPath, new WriterParameters() { WriteSymbols = true, SymbolWriterProvider = debugWriterProvider });
Une idée comment je pourrais faire ça?