为什么Stack Trace显示我的开发文件路径?

Visual Studio 2010 SP1,已编译的WCF应用程序,将其放在服务器上,当然它在第一次运行时出现错误(有什么新内容),将堆栈跟踪输出到日志文件。

它正在看到我的开发环境的路径。 为什么? 是因为我将它部署为Debug与Release相比还是还有别的东西,或者我是否应该更谨慎地输出Stack Traces呢?

04/09/2012 03:58:46: Error: Object reference not set to an instance of an object. at App1.Logging.LogMessageToFile(String msg, Boolean isUsingClickOnceApp) in C:\Users\robcube\Documents\Visual Studio 2010\Projects\AppWebService\App1\Logging.cs:line 63 at App1.App1Main.ConnectWebService(String description) in C:\Users\robcube\Documents\Visual Studio 2010\Projects\AppWebService\App1\International.cs:line 40 04/09/2012 03:58:46: Error: Object reference not set to an instance of an object. at App1.App1Main.UpdateActivityLog(String data, String userName, Boolean deleteData, Int64 firstId, Int64 lastId, String changeType) in C:\Users\robcube\Documents\Visual Studio 2010\Projects\AppWebService\App1\App1Main.cs:line 641 

谢谢,-rob

这是因为您复制了.pdb文件以及可执行文件。 CLR将在生成堆栈跟踪时查找它们,以尝试尽可能多地提供有关跟踪中堆栈帧的信息。 .pdb存储源文件名和行号。

您应该部署代码的Release版本。 这使得优化可以使您的代码运行得更快。 您仍然可以复制该构建的.pdb文件,它们通常会删除调试信息。 Project + Properties,切换到Release build,Build,Advanced,“Debug Info”设置。 发布版本的正常设置是“pdb-only”而不是“full”。 这意味着不包括源文件和行号。 这是有道理的,在抖动优化代码之后,堆栈跟踪往往有点不可靠。

在调试模式下部署时,原始源文件路径存储在PDB( 程序数据库 )文件中是正常的。