获取当前方法名

12

我想要获取当前被调用的处理程序的名称。

MethodInfo.GetCurrentMethod().Name 或者 MethodBase.GetCurrentMethod().Name 在调试模式下都能正常工作。

但是一旦我使用 ConfuserEx 对我的项目进行混淆之后,这两个函数会返回"System.Reflection.MethodBase ()"

我注意到可以使用以下代码行来获取函数的名称: ((RoutedEventHandler)this.MyMethodName).GetMethodInfo().Name

它将返回预期结果 "MyMethodName"

但这并不通用。我希望能够编写适用于任何方法的代码。


1
可能是C#如何从代码中获取当前方法的名称的重复问题。 - Thomas Ayoub
2
@Thomas,Yahya:我不认为这是重复的问题,因为没有一个链接的问题特别涉及到为了使其对抗代码混淆而引入的困难。 - O. R. Mapper
@O.R.Mapper已将其移除。 - Yahya
@rene: 我不知道。原帖的提问者应该尝试一下(如果成功了,他们可以回答自己的问题以供将来参考,或者删除问题,因为对他们来说这个问题已经不存在了)。这只是我的观点,但在这两种情况下,如何以一种能够在混淆中生存的方式获取当前方法名的问题之前并没有被提出过(至少在链接的所谓重复问题中没有),尽管解决方案恰好与现有其他问题相同。另一种选择可能是在现有问题的答案中添加评论,指出... - O. R. Mapper
谢谢您的建议,我会尝试并告诉您。 - user2088807
显示剩余4条评论
1个回答

20

此处所述

调用者信息值在编译时作为字面量发射到中间语言 (IL) 中。与异常的 StackTrace 属性的结果不同,这些结果不会受混淆的影响。

因此,您可以尝试从您的方法中调用以下方法:

public string GetCaller([System.Runtime.CompilerServices.CallerMemberName] string memberName = "")
{
     return memberName;
}

1
是的,它正在工作,我正在尝试这个解决方案,感谢@O. R. Mapper,感谢你们两个提供的解决方案 :) - user2088807

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接