Получение локальных переменных, ExceptionHandlingClauses и массива IL из динамического метода

Из базы методов мне нужно получить массив инструкций 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?< /а>


person Nick    schedule 12.03.2018    source источник
comment
Можете ли вы добавить ссылки на вопросы, объясняющие, как получить инструкции IL динамического метода.   -  person thehennyy    schedule 12.03.2018
comment
Добавил ссылки!   -  person Nick    schedule 12.03.2018
comment
Так же, как и в упомянутом вопросе, вы, вероятно, могли бы взломать детали реализации, чтобы получить MethodBody с помощью InternalMethodHandle. Позвольте справочному источнику referencesource.microsoft.com помочь вам и попробовать.   -  person thehennyy    schedule 13.03.2018