引用项目中抛出异常?

时间:2011-01-01 14:06:44

标签: c# asp.net debugging exception-handling reference

我有一个由2个项目组成的Visual Studio 2010解决方案:

  1. Core ,一个处理功能和数据访问的C#类库项目
  2. UI ,一个引用Core的ASP.NET 4网站(.NET Framework 4),并调用Core中的功能。
  3. 我的异常处理程序在Global.asax(Application_Error。)中设置。 当UI中发生异常时,一切都运行正常,我得到文件名,行号等。

    核心中发生的异常情况并非如此。 为此,我得到了一个类似的堆栈跟踪:

    {FillUserCount at offset 2376 in file:line:column <filename unknown>:0:0}
    

    P.S。 Core Bin和Core.pdb存在于UI Bin文件夹中。 在Visual Studio中 - &gt;工具 - &gt;选项 - &gt;调试 - &gt;取消选中“仅启用我的代码”,并选中“启用源服务器支持”。

    有没有办法获取堆栈框信息(文件名,类,方法,行号)以及我引用项目中出现的错误?

2 个答案:

答案 0 :(得分:3)

实现这一目标的解决方案是创建一个新网站并重新引用Core项目。

仍然,Jon Skeet提到的先决条件保持不变:

  • 项目必须在Debug配置中构建,而不是Release
  • 在引用项目时,确保复制PDB文件
  • 在代码端,当检索有关发生的异常的信息并使用StackTrace时,请确保创建第二个参数设置为true的实例(true表示捕获文件名,行号和列号;否则,假的。)

这是我最后的工作代码。它可能会帮助其他人:

        Exception ex = Server.GetLastError().GetBaseException();       

        StackTrace trace = new StackTrace(ex, true);
        if (trace.FrameCount == 0)
            return;

        StackFrame stackFrame = trace.GetFrame(0);

        string className, fileName, functionName, message;
        int line = 0;

        // if for some reason, filename is being retrieved as null
        if (stackFrame.GetFileName() == null)
        {
            className = ex.TargetSite.ReflectedType.Name;
            fileName = ex.TargetSite.ReflectedType.Name;
            functionName = ex.TargetSite.Name;
            message = ex.Message;
        }
        else
        {
            // Collect data where exception occured
            string[] splitFile = stackFrame.GetFileName().Split('\\');
            className = splitFile[splitFile.Length - 1];
            fileName = stackFrame.GetFileName();
            functionName = stackFrame.GetMethod().Name;
            message = ex.Message;
            line = stackFrame.GetFileLineNumber();
        }

答案 1 :(得分:2)

你是如何引用Core的?如果你已经添加了对“Release”DLL的引用,那就可以解释它...如果你刚刚添加了对项目的引用,那么你正在使用“Debug”运行构建“配置那么它应该没问题。