C# 从DLL获取函数名

C# 从DLL获取函数名,c#,asp.net,exception,function,C#,Asp.net,Exception,Function,我想获取asp.net中从dll抛出的异常的函数名。您应该能够使用堆栈跟踪 表示堆栈跟踪,它是 一个或多个的有序集合 堆叠框架 此时将创建并推送堆栈框架 每个函数调用的调用堆栈 在线程执行期间生成的。 堆栈帧始终包括 MethodBase信息,以及可选的 包括文件名、行号和 列号信息 StackFrame信息将是最有用的 调试生成的信息 配置。默认情况下,调试 生成包括调试符号,而 发布版本不会。调试 符号包含文件的大部分内容, 方法名称、行号和列 信息在建筑中的应用 堆栈帧对象 您可以从

我想获取asp.net中从dll抛出的异常的函数名。

您应该能够使用堆栈跟踪

表示堆栈跟踪,它是 一个或多个的有序集合 堆叠框架

此时将创建并推送堆栈框架 每个函数调用的调用堆栈 在线程执行期间生成的。 堆栈帧始终包括 MethodBase信息,以及可选的 包括文件名、行号和 列号信息

StackFrame信息将是最有用的 调试生成的信息 配置。默认情况下,调试 生成包括调试符号,而 发布版本不会。调试 符号包含文件的大部分内容, 方法名称、行号和列 信息在建筑中的应用 堆栈帧对象

您可以从异常创建一个类并分析框架

例如:

public void Throw()
{
    throw new MyException();
}

public void CallThrow()
{
    Throw();
}

[Test]
public void GetThrowingMethodName()
{
    try
    {
        CallThrow();
        Assert.Fail("Should have thrown");
    }
    catch (MyException e)
    {
        MethodBase deepestMethod = new StackTrace(e).GetFrame(0).GetMethod();
        string deepestMethodName = deepestMethod.Name;
        Assert.That(deepestMethodName, Is.EqualTo("Throw"));
    }
}

您可以在system.diagnostic命名空间的帮助下尝试stacktrace对象这里是您可以尝试的linqpad测试源代码

void Main()
{
    try {
        test();
    }
    catch(Exception ex) {
        StackTrace st = new StackTrace();
        st.GetFrame(1).GetMethod().Name.Dump();
    }
}

// Define other methods and classes here


public void test()
{
    throw new NotImplementedException();
}

Checkout Method

您的意思是要获取引发异常的方法的名称吗?是的,我需要dll中引发异常的方法的名称。如果无法获取方法的名称,请告诉我如何从引发异常的dll中获取方法的名称。@ram,您得到的结果是什么?你能发布一个你的代码和对引发异常的外部程序集的调用的示例吗?这里是我的示例代码:void test(){/*exception comed Here*/}公共类方法{void load(){test();}}这里类名'method'是一个dll文件,我从方法'test()'获得异常。但是堆栈跟踪将方法的名称返回为“load()”。我需要获取方法名“test()”。