Ich möchte IL-Code in Methoden injizieren, die eine generische Methode (mit Rückgabetyp und Argumente) aufruft.Aufruf generische Methode mit Mono Cecil
Ich kann nicht generische Methoden aufrufen, aber ich habe keine Ahnung, wie man eine generische Methode nennt.
Meine Frage ist, wie könnte ich diesen generischen Methodenaufruf in eine Methode injizieren?
Beispiel für nicht-generisches Verfahren Injektion:
1, wobei die Anordnung offen und die nichtgenerische Methode info
DefaultAssemblyResolver resolver = new DefaultAssemblyResolver();
resolver.AddSearchDirectory(assemblyResolverPath);
AssemblyDefinition myLibrary = AssemblyDefinition.ReadAssembly(assemblyPath, new ReaderParameters() { AssemblyResolver = resolver });
MethodInfo writeLineMethod = typeof(Debug).GetMethod("WriteLine", new Type[] { typeof(string) });
MethodReference writeLine = myLibrary.MainModule.Import(writeLineMethod);
2, Injizieren Sie die "Writeline" -Methode in die gewählten Methode erhalten:
ILProcessor ilProcessor = method.Body.GetILProcessor();
Instruction callWriteLine = ilProcessor.Create(OpCodes.Call, writeLine);
ilProcessor.InsertBefore(ins, "CALL");
ilProcessor.InsertBefore(ins, callWriteLine);
die folgenden Zusatz IL Anweisungen in der gewählten Methode führt:
IL_0001: ldstr "CALL"
IL_0006: call void [mscorlib]System.Console::WriteLine(string)
Aber im Fall eines allgemeinen Verfahrens, soll ich die IL erhalten:
IL_0001: ldc.i4.s 10 // 0x0a
IL_0003: ldstr "CALL"
IL_0008: call !!0/*int32*/ ReturnTestModule.ReturnTest::MyGenericMethod<int32>(!!0/*int32*/, string)
Ich habe die allgemeinen Argumente und den Rückgabewert Typen auf jeden Fall zu handhaben, aber ich weiß nicht, wie soll ich tun es.
Können Sie bitte ein kleines Beispiel schreiben, das zeigt, wie Sie nicht-generische Methoden injizieren können? Ich könnte Ihnen vielleicht helfen, wenn ich sehe, wie Sie es versuchen. –
Beispiel einer nicht generischen Methode hinzugefügt. –