Asp.net 显示异常StackTrace在发布程序集中有用还是仅在DEBUG.dll中有用

Asp.net 显示异常StackTrace在发布程序集中有用还是仅在DEBUG.dll中有用,asp.net,web-services,stack-trace,event-log,debug-symbols,Asp.net,Web Services,Stack Trace,Event Log,Debug Symbols,为了改进Web服务中的错误处理,我做了很多工作,特别是在本例中展示了StackTrace: catch (Exception ex) { EventLog log = new EventLog(); log.Source = g_EventSource; StringBuilder msg = new StringBuilder("Exception in UpdateRecord method has be

为了改进Web服务中的错误处理,我做了很多工作,特别是在本例中展示了StackTrace:

catch (Exception ex)
        {
            EventLog log = new EventLog();
            log.Source = g_EventSource;
            StringBuilder msg = new StringBuilder("Exception in UpdateRecord method has been logged:");
            msg.Append(Environment.NewLine);
            msg.Append("passedURL="); msg.Append(passedURL);
            msg.Append(Environment.NewLine);
            msg.Append(ex.Message);
            msg.Append(Environment.NewLine); 
            msg.Append(ex.Source);
            msg.Append(Environment.NewLine);
            msg.Append(ex.StackTrace);
            log.WriteEntry(msg.ToString(), EventLogEntryType.Error, 100);
            return msg.ToString();
        }
我的问题是,当我将Web服务编译为发行版而不是调试版后,会发生什么?当我在调试模式下编译时,我现在只发布.dll和web.config(无源代码),但当记录错误时,StackTrace会指向我的开发机器中的文件行号,如:

C:\Documents and Settings\johna\My Documents\Visual Studio 2008\Projects\   etc.

简言之,发布模式DLL是否仍会显示上述堆栈跟踪?我认为会,但不确定;在我们准备进入另一个部署级别时,我的系统管理员提出了这个问题

堆栈跟踪消息中可以有行编号器,但需要包含.PDB文件。即使在发布模式下也没有问题。

您应该输出ex.ToString(),而不是输出片段。它不仅将显示完整的跟踪,还将考虑跨AppDomains和跨远程处理边界的跟踪。即使您不是“手动”使用远程处理,这也很重要,因为.NET有时在内部使用远程处理。@John Saunders:有趣的一点。我只是试图打破“碎片”,试图创造一个“更好”的显示。当我使用内置web客户机测试服务时,msg.ToString()的返回只会导致大量XML(即没有良好的格式)。您的观点提供了另一个理由,可以将事情简化为ex.ToString(),并忘记尝试使用换行符“中断”,因为它无论如何都不起作用。谢谢。@Dario:我想确定我明白你的意思。因为我只发布运行应用程序所需的文件,所以没有发布到生产Web服务器的源代码。但是,如果我将.PDB文件与相应的.DLL一起推出,那么当我请求堆栈跟踪时,它将在我的开发机器(即我启动发布操作的机器)上的文件中显示行号。因此,在生产机器上看到这种文件引用的系统管理员不应该惊慌失措,因为web服务器上的c:\Documents和Settings中没有这样的用户。是的,PDB文件包含发布应用程序的用户的信息(换句话说:谁编译并生成.dll和相应的.PDB文件)。