【发布时间】:2013-08-21 10:04:51
【问题描述】:
我想在抛出异常时给自己发送一封电子邮件。使用 StackFrame 对象,我可以获得抛出异常的文件名、类名甚至类方法,但我还需要知道项目名称,因为我的许多 ASP.NET 项目具有相同的文件名、类名和方法.
这是我的代码:
public static string JndGetEmailTextForDebuggingExceptionError(this Exception Ex)
{
StackFrame sf = Ex.JndGetStackFrame();
string OutputHTML = "<i><b><u>For Developer Use Only: </u></b></i>" + "<br>" +
"<br>" +
"Project Name: " + HttpContext.Current.ApplicationInstance.GetType().Assembly.GetName().Name + "<br>" + //Under discussion
"File Name: " + sf.GetFileName() + "<br>" +
"Class Name: " + sf.GetMethod().DeclaringType + "<br>" +
"Method Name: " + sf.GetMethod() + "<br>" +
"Line Number: " + sf.GetFileLineNumber() + "<br>" +
"Line Column: " + sf.GetFileColumnNumber() + "<br>" +
"Error Message: " + Ex.Message + "<br>" +
"Inner Message : " + Ex.InnerException.Message + "<br>";
return OutputHTML;
}
谢谢大家。
【问题讨论】:
-
这听起来令人困惑。为什么不同项目的文件名和类名一样?
-
@TimS。 - 文件:HomeController.cs;类:家庭控制器;方法:索引。这是大多数 VS 用户在新的 MVC 项目中获得的模板。
-
不确定您所说的项目是什么意思,调用程序集?除非您使用 throw(ex) 将其销毁,否则应该在堆栈跟踪中。某种应用程序记录器并附加输出将是更好的选择。当事情变得可怕时,您可以将它们排队而不是收到大量电子邮件。
-
它在单独的程序集中。
-
我认为我可以使用完整的文件路径来确定它是哪个项目,但是我想知道是否有更好的方法来仅获取项目名称。