Я пытаюсь найти решение для «взлома непубличных методов».
Я просто хочу вызвать 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
. Есть ли какой-нибудь сложный способ достичь того, чего я хочу?