从Exception获取文件名和行号

时间:2014-01-08 09:12:35

标签: c# exception .net-2.0 stack-trace plugin-architecture

我有一个c#windows应用程序(在插件架构中开发),我想从我的应用程序中记录所有未处理的异常。 我能够抓住所有的例外情况。

我想阅读文件名和例外情况中的行号。 (在 .Net 2.0 中)

我用过

 if (exception.InnerException != null)
 {
     exception = exception.InnerException;
 }

StackTrace trace = new StackTrace(exception, true);
string fileName = trace.GetFrame(0).GetFileName();
int lineNo = trace.GetFrame(0).GetFileLineNumber();

它在我的应用程序中有异常,如果引用dll中的任何异常我没有得到fileName和lineNumber

2 个答案:

答案 0 :(得分:4)

此信息仅在相关DLL的“.pdb”文件可用时才可用。

因此,您应确保相应的“.pdb”文件与其对应的DLL一起使用。

您还需要在PDB文件中启用完整数据。默认情况下,调试版本执行此操作,但版本构建不包括行号信息。

您可以通过转到项目的Build页面来配置发布版本,确保选择了“Release”配置,然后单击页面底部的“Advanced”按钮。在“高级构建设置”对话框中,需要为“调试信息”设置选择“完整”。

答案 1 :(得分:0)

第一帧并不总是正确答案。就我而言,这是最后一个。一般来说,我认为它是第一个带文件的。