从方法库中,我需要获取IL指令的数组,该方法异常处理程序的位置和种类以及该方法中的局部变量。
目前要这样做(对于我刚刚做的非动态方法)
MethodBody pBody = pMethod.GetMethodBody();
Method = pMethod;
MethodName = pMethod.Name;
IsPublic = pMethod.IsPublic;
IsStatic = pMethod.IsStatic;
Instructions = pBody.GetILAsByteArray();
Variables = pBody.LocalVariables.ToArray();
Module = pMethod.Module;
MethodInfo pMethodInfo = pMethod as MethodInfo;
ReturnType = pMethodInfo == null ? typeof(void) : pMethodInfo.ReturnType;
ExceptionHandlers = pBody.ExceptionHandlingClauses.ToArray();
Position = 0;
mhashExceptionParameters = new HashSet<ParameterExpression>();
mdictLocalExpressions = new Dictionary<LocalVariableInfo, ParameterExpression>();
但是,如前所述,GetMethodBody()不适用于动态方法(例如,通过编译linq表达式获得的方法句柄)。我知道这里的某些答案显示了如何获得IL指令。但是如何在方法体中获取其他内容,例如Variables和Exceptionhandlers?
作为参考,请参阅此问题,其中给出了获取IL字节数组的解决方案。 How do I get an IL bytearray from a DynamicMethod?