Я пытаюсь найти решение для «взлома непубличных методов».
Я просто хочу вызвать RuntimeMethodInfo.InternalGetCurrentMethod(...)
, передав свой собственный параметр (чтобы я мог реализовать GetCallingMethod()
), илинепосредственно используйте RuntimeMethodInfo.InternatGetCurrentMethod(ref StackCrawlMark.LookForMyCaller)
в моих процедурах регистрации.GetCurrentMethod
реализовано как:
[MethodImpl(MethodImplOptions.NoInlining)]
public static MethodBase GetCurrentMethod()
{
StackCrawlMark lookForMyCaller = StackCrawlMark.LookForMyCaller;
return RuntimeMethodInfo.InternalGetCurrentMethod(ref lookForMyCaller);
}
, где объявлено InternalGetCurrentMethod
: internal: -).
У меня нет проблем с вызовом метода с использованием отражения, но это портит вызовстек, и это единственная вещь, которую нужно сохранить, иначе она побеждает свою цель.
Каковы мои шансы держать трассировку стека близкой к оригиналу (по крайней мере, в пределах расстояния от разрешенного StackCrawlMark
s, которые LookForMe
, LookForMyCaller
и LookForMyCallersCaller
. Есть ли какой-нибудь сложный способ достичь того, чего я хочу?