Я поддерживаю приложение, которое отправляет мне электронное письмо, когда в приложении возникает ошибка. Я выгружаю трассировку стека в электронное письмо, и, похоже, все работает нормально. Не хватает только значений переменных. Я получаю все звонки и все такое, но никаких переменных никогда. Что мне не хватает для того, чтобы эти значения переменных тоже были сброшены в электронное письмо?
Ниже приведен код, который я использую для сброса его в электронное письмо:
UtilityClass.SendEmail(shortNTID,
"admin@mydomain.com",
new string[] { "support@mydomain.com" },
"MyApplication error has occured for user: " +
shortNTID + " (Main).",
"Message: " + ex.Message.ToString() +
" Source: " + ex.Source.ToString() +
" Target Site: " + ex.TargetSite.ToString() +
" Stack Trace: " + ex.StackTrace.ToString());
И вот результат в электронном письме:
Сообщение: Указанное приведение неверно. Источник: MyApplication Целевой сайт: Void FindFormAndActivate (MyApplication.MDIParentForm, System.String, System.Object) Трассировка стека: в MyApplication.UtilityClass.FindFormAndActivate (MDIParentForm frmMDIParentForm, String formName, параметр объекта) в MyApplication.DashboardAlerts.NavigateToAssignment () в MyApplication.DashboardAlerts.utAlerts_MouseClick (отправитель объекта, MouseEventArgs e) в System.Windows.Forms.Control.OnMouseClick (MouseEventArgs e) в System.Windows.Forms.Control.WmMouseUp (сообщение & m, кнопка MouseButtons, щелчки Int32) в System.Windows.Forms.Control.WndProc (сообщение & m) в System.Windows.Forms.Control.ControlNativeWindow.OnMessage (сообщение & m) в System.Windows.Forms.Control.ControlNativeWindow.WndProc (сообщение & m) в System.Windows.Forms.NativeWindow.Callback (IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
РЕДАКТИРОВАТЬ
В некоторых ответах предлагалось, чтобы я сам добавил значения переменных в электронное письмо. Но как мне получить эти значения? Этот фрагмент кода, который отправляет электронное письмо, не находится в методе, который дает сбой. Это код, который запускается каждый раз при возникновении исключения. Если исключение не обрабатывается и не исправляется, я позволяю ему всплывать в верхнюю часть потока а-ля Application.ThreadException + = new ThreadExceptionEventHandler (HandleError);
и метод HandleError
это тот, кто делает этот электронный звонок. Он не знает, какие переменные или параметры были для метода, вызвавшего исключение.