Как удалить последние несколько сегментов Emit IL во время выполнения
Я попытался изменить некоторую логику в тысяче строк кода, я хочу использовать способ отката IL, чтобы добавить новую логику, избегая измененияпредыдущий код.
простой, например:
Я надеюсь удалить последние несколько сегментов Emit IL и затем выдать новый il, когда isSomeLogic
истинно.
void Main()
{
DynamicMethod methodbuilder = new DynamicMethod("Deserialize" + Guid.NewGuid().ToString(), typeof(void), null);
var il = methodbuilder.GetILGenerator();
il.Emit(OpCodes.Ldstr, "Hello World");
Type[] types = new Type[1]{typeof(string)};
MethodInfo method = typeof(Console).GetMethod("WriteLine", types);
il.Emit(OpCodes.Call, method);
il.Emit(OpCodes.Ret);
// do some thing...
var isSomeLogic = true;
if( isSomeLogic ){
//remove the il OpCodes.Ret and add new logic Emit
il.Emit(OpCodes.Ret);
}
var func = (Action)methodbuilder.CreateDelegate(typeof(Action));
func();
}