Необработанные исключения с Global.asax

Я отправляю по электронной почте сведения о необработанных исключениях из global.asax. Как я могу получить путь и / или имя файла aspx или файла сборки, в котором исключение не было обработано.

Эта информация отображалась в трассировке стека исключения, когда я разрабатывал и тестировал. Когда я развернул global.asax в рабочей среде, эта информация больше не отображается в трассировке стека.

Есть ли способ получить эту информацию при создании объекта MailMessage в Global.asax?

Спасибо

Ответов (2)

Решение

Если это приложение ASP.NET, о чем свидетельствует тег, вы должны иметь возможность сделать что-то вроде этого ... ctx.Request.Url.ToString () даст вам имя файла, в котором произошла ошибка.

protected void Application_Error(object sender, EventArgs e)
{
    MailMessage msg = new MailMessage();
    HttpContext ctx = HttpContext.Current;

    msg.To.Add(new MailAddress("[email protected]"));
    msg.From = new MailAddress("[email protected]");
    msg.Subject = "My app had an issue...";
    msg.Priority = MailPriority.High;

    StringBuilder sb = new StringBuilder();
    sb.Append(ctx.Request.Url.ToString() + System.Environment.NewLine);
    sb.Append("Source:" + System.Environment.NewLine + ctx.Server.GetLastError().Source.ToString());
    sb.Append("Message:" + System.Environment.NewLine + ctx.Server.GetLastError().Message.ToString());
    sb.Append("Stack Trace:" + System.Environment.NewLine + ctx.Server.GetLastError().StackTrace.ToString());
    msg.Body = sb.ToString();

    //CONFIGURE SMTP OBJECT
    SmtpClient smtp = new SmtpClient("myhost");

    //SEND EMAIL
    smtp.Send(msg);

    //REDIRECT USER TO ERROR PAGE
    Server.Transfer("~/ErrorPage.aspx");
}

В Visual Studio вам необходимо настроить сборку выпуска для генерации отладочных символов. В отличие от отладочной сборки, это не установлено по умолчанию. Это даст вам полную трассировку стека исключений.

Даже в этом случае оптимизация, выполненная JIT-компилятором (например, встраивание), может означать, что вы не получите правильный номер строки в трассировке стека. Если вы хотите быть уверены в номере строки, вы также можете установить для сборки выпуска значение «без оптимизации». Но это может означать, что ваше приложение имеет более низкую производительность и / или пропускную способность (последнее имеет тенденцию быть более важным в веб-приложении).

РЕДАКТИРОВАТЬ : Вы можете найти параметр «генерировать символы отладки», перейдя в окно обозревателя решений, щелкнув проект правой кнопкой мыши и выбрав пункт меню «Свойства». Затем перейдите в Свойства конфигурации> Сборка> Создать отладочную информацию и установите значение true или false. Параметр «Оптимизировать код» находится в том же окне.