我正在使用MVC项目,并且已经在Global.ascx
中记录了应用程序错误。
这是我的代码
protected void Application_Error(Object sender, System.EventArgs e)
{
System.Web.HttpContext context = HttpContext.Current;
System.Exception exception = Context.Server.GetLastError();
var stackTraceExcep = new StackTrace(exception, true); // create the stack trace
var stackTrace = stackTraceExcep.GetFrames() // get the frames
.Select(frame => new
{ // get the info
FileName = frame.GetFileName(),
LineNumber = frame.GetFileLineNumber(),
ColumnNumber = frame.GetFileColumnNumber(),
Method = frame.GetMethod(),
Class = frame.GetMethod().DeclaringType,
}).FirstOrDefault();
string FileName = stackTrace.FileName;
string LineNumber = stackTrace.LineNumber.ToString();
string ColumnNumber = stackTrace.ColumnNumber.ToString();
string MethodName = stackTrace.Method.Name;
string ClassName = stackTrace.Class.Name;
int Errornumber = Convert.ToInt32(errorRepository.AddError(exception.Message, FileName, Convert.ToInt32(LineNumber), Convert.ToInt32(ColumnNumber), MethodName, ClassName));//This line helps to stores the error in my database.
Response.Redirect(String.Format("~/Error/{0}/?errorNumber={1}", "App_Error", Server.UrlEncode(Errornumber.ToString())));//Pass the error number to a cantroller for show the error number(last inserted id) in view
context.Server.ClearError();
}
好吧,让我在这里解决问题
上面的代码在我的本地计算机上运行良好。此代码将(
error path , error name ,error line number ,error column number, error method name, error class name .
)存储在数据库中。现在,当我发布项目并在服务器上部署发布版本(
Arvixe
)时。我的应用程序错误方法中的代码适用于
class name method name and exception message
,并将此数据存储在数据库中,但是error line number
和error column number
未存储在数据库中。我看到了数据库,它什么也没有存储。问题是什么 ?为什么将
error line number
和error column name
部署到Web服务器时未存储(在我的本地系统上一切正常)?我有些疑惑
1)该项目是已发布的版本,因此所有项目文件(类, Controller ,模型等(我想您知道))都转换为DLL,所以我猜
StackTrace
没有得到错误行详细信息?我对么 ?别告诉我。2)服务器没有Visual Studio。所以我想这行不通吗?我是否正确告诉我?
最佳答案
似乎连接字符串未正确设置。无法连接数据库时,将发生“处理应用程序”错误。打开您的web.config文件,并在其中添加连接字符串。
关于c# - 处理应用程序错误问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18407374/