Из базы методов мне нужно получить массив инструкций 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. Но как мне получить другие вещи в теле метода, такие как переменные и обработчики исключений?
Для справки см. этот вопрос, где приведены решения для получения массива байтов IL. Как мне получить байтовый массив IL из DynamicMethod?< /а>
MethodBody
с помощьюInternalMethodHandle
. Позвольте справочному источнику referencesource.microsoft.com помочь вам и попробовать. - person thehennyy   schedule 13.03.2018