WinForms рдФрд░ WPF рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢ рд╡рд┐рдВрдбреЛ


рдирдорд╕реНрддреЗ!

рдПрдВрдЯрд┐рдЯреА рдлреНрд░реЗрдорд╡рд░реНрдХ рдХреЗ рд▓рд┐рдП рдореЗрд░реЗ рдкреНрд░реЛрдлрд╛рдЗрд▓рд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рд▓реЗрдЦ рдореЗрдВ, рдореИрдВрдиреЗ рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ рдЙрд╕ рдлреЙрд░реНрдо рдХрд╛ рд╡рд░реНрдгрди рдХрд┐рдпрд╛ рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдореИрдВрдиреЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рдПрдХ рдЕрд╕рд╛рдзрд╛рд░рдг рддреНрд░реБрдЯрд┐ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реВрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдерд╛ред рдирдореВрдирд╛ рдХреЛрдб рдХреЗ рдбрд╛рдЙрдирд▓реЛрдб рдХреА рд╕рдВрдЦреНрдпрд╛ рдХрд╛ рдЕрдиреБрдорд╛рди рд▓рдЧрд╛рдиреЗ рдХреЗ рдмрд╛рдж, рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдХреЛ рдПрдХ рдЕрд▓рдЧ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдЕрд▓рдЧ рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ рдЧрдпрд╛, рд╕рд╛рде рд╣реА рд╕рд╛рде рдПрдкреАрдкреАрдЖрд░ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди рднреА рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ред
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд╕рд╛рде рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╕реНрд░реЛрдд рдореБрдХреНрдд рдПрдордЖрдИрдЯреА рд▓рд╛рдЗрд╕реЗрдВрд╕ рдХреЗ рддрд╣рдд рдХреЛрдбрдкреНрд▓реЗрдХреНрд╕ рдкрд░ рдкреНрд░рдХрд╛рд╢рд┐рдд рд╣реЛрддреЗ рд╣реИрдВ: https://uiexceptionhandler.codexx.com/

рдХрдЯ рдХреЗ рддрд╣рдд рд╡рд┐рд╡рд░рдгред

рдкрд░рд┐рдЪрдп

рд╣рд░ рдХреЛрдИ рдЬрд╛рдирддрд╛ рд╣реИ рдХрд┐ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХрдИ рдХрд╛рд░рдгреЛрдВ рд╕реЗ рд╕рдордп-рд╕рдордп рдкрд░ рджреБрд░реНрдШрдЯрдирд╛рдЧреНрд░рд╕реНрдд рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВ, рдФрд░ рдорд╛рдирдХ рд╡рд┐рдВрдбреЛрдЬ рд╕рдВрджреЗрд╢ рдХреЗ рдмрдЬрд╛рдп рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рдореИрддреНрд░реАрдкреВрд░реНрдг рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢ рджрд┐рдЦрд╛рдирд╛ рдЕрддреНрдпрдзрд┐рдХ рдЙрдЪрд┐рдд рд╣реИред

рдХреНрдпрд╛ рд╣реБрдЖ?

рдЬрдм рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрдиреЗрдХреНрдЯ рд╣реЛрддреА рд╣реИ, рддреЛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреНрд░реИрд╢ рд╣реЛрдиреЗ рдХреА рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рдирд┐рдореНрди рд╕рдВрджреЗрд╢ рдЖрдкрдХреЛ рдЙрди рдЪрд░рдгреЛрдВ рдХрд╛ рд╡рд┐рд╡рд░рдг рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣рд╛ рдЬрд╛рдПрдЧрд╛, рдЬреЛ рдЙрддреНрддрд░ рдХреЗ рд▓рд┐рдП рддреНрд░реБрдЯрд┐ рдФрд░ рдЖрдкрдХреЗ рдИрдореЗрд▓ рдХрд╛ рдХрд╛рд░рдг рдмрдиреЗ, рдЬрдмрдХрд┐ рддреНрд░реБрдЯрд┐ рдкрд╛рда рд▓реЙрдЧ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╕рд╣реЗрдЬрд╛ рдЧрдпрд╛ рд╣реИред


"рддреНрд░реБрдЯрд┐ рд╡рд┐рд╡рд░рдг рдЬрд╛рдирдХрд╛рд░реА" рдмрдЯрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рдиреЗ рдкрд░, рдЕрддрд┐рд░рд┐рдХреНрдд рддреНрд░реБрдЯрд┐ рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рджрд░реНрд╢рд┐рдд рд╣реЛрддреА рд╣реИ:


рдбреАрдмрдЧ рдмрдЯрди рдЖрдкрдХреЛ рд╡рд┐рдЬрд╝реБрдЕрд▓ рд╕реНрдЯреВрдбрд┐рдпреЛ рдбреАрдмрдЧрд░ рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред
тАЬSend to DeveloperтАЭ рдмрдЯрди рдбреЗрд╡рд▓рдкрд░ рдХреЛ рдПрдХ рдИрдореЗрд▓ рднреЗрдЬрддрд╛ рд╣реИред рд╕рдВрджреЗрд╢ рднреЗрдЬрдиреЗ рдореЗрдВ рддреНрд░реБрдЯрд┐ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдореЗрд▓ рджреНрд╡рд╛рд░рд╛ рдбреЗрд╡рд▓рдкрд░ рдХреЛ рд▓реЙрдЧ рдлрд╝рд╛рдЗрд▓ рднреЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣рд╛ рдЬрд╛рдПрдЧрд╛ред
рдбреЗрд╡рд▓рдкрд░ рдХреЛ рднреЗрдЬрд╛ рдЧрдпрд╛ рд╕рдВрджреЗрд╢ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд░реВрдк рдореЗрдВ рдЖрдПрдЧрд╛:


рдХреЗ рдЙрдкрдпреЛрдЧ

1. рдирд╡реАрдирддрдо рдХреЛрдб https://uiexceptionhandler.codeplex.com/SourceControl/latest рдЪреБрдиреЗрдВ
2. рд░рд┐рд▓реАрдЬ рдореЛрдб рдореЗрдВ рдЗрдХрдЯреНрдард╛ рдХрд░реЗрдВред
3. "UIExceptionHandlerLibs \ Deploy" рдлрд╝реЛрд▓реНрдбрд░ рд╕реЗ, WinForms рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдФрд░ UIExceptionHandlerWFF.dll рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ UIExceptionHandlerWinForms.dll рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ WPF рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдХрдиреЗрдХреНрдЯ рдХрд░реЗрдВред
4. рдХрдИ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рд╕реНрдерд┐рд░ рд╡рд┐рдзрд┐ рдХрд╣рдХрд░ рдЖрд░рдВрдн рдХрд░реЗрдВ:
UIException.Start( string serverSmtp, int portSmtp, string passwdSmtp, string userSmtp, string programmerEmail, string fromEmail, string subject ) 

рдпрд╣ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ

рд╕реНрдерд┐рд░ UIException.Start рд╡рд┐рдзрд┐ AppDomain.CurrentDomain.UnhandledException рдШрдЯрдирд╛ рдХреЗ рд▓рд┐рдП рд╣реИрдВрдбрд▓ рд╡рд┐рдзрд┐ рдХреА рд╕рджрд╕реНрдпрддрд╛ рд▓реЗрддреА рд╣реИ:
 AppDomain.CurrentDomain.UnhandledException += (sender, e) => HandleError((Exception)e.ExceptionObject); 

рд╕рдВрднрд╛рд▓ рд╡рд┐рдзрд┐:
 private static void HandleError(Exception exception) { try { //             IErrorHandlerForm new ErrorHandlerController(exception, new ErrorHandlerForm()).Run(); } catch (Exception e) { //      LogHelper.Logger.Error(e); //               MessageBox.Show("Error processing exception. Please send log file " + LogHelper.ExceptionLogFileName + " to developer: " + Settings.ProgrammerEmail + " \r\n Exception:" + e); //      if (MessageBox.Show("Attach debugger? \n Only for developer!!!", "Debugging...", MessageBoxButton.YesNo, MessageBoxImage.Question) == MessageBoxResult.Yes) { Debugger.Launch(); throw; } } finally { //     windows       Environment.Exit(1); } } 

IErrorHandlerForm рдЗрдВрдЯрд░рдлрд╝реЗрд╕:
 public interface IErrorHandlerForm { event Action OnSendButtonClick; event Action OnShowErrorLinkClick; event Action OnLogFileLinkClick; event Action OnDebugButtonClick; //    void SetHeight(int height); //      string ExceptionInfoText { get; set; } //         string ExceptionDetailText { get; set; } // email    string ReplyEmail { get; } void ShowExceptionInfoTextBox(bool isShow); //    void ShowInfoMessageBox( string text, string caption); //    bool ShowQuestionDialog( string text, string caption); //     !          finaly void ShowViewDialog(); void UpdateContactEmail(string contactEmail); } 

NLog рдХрд╛ рдЙрдкрдпреЛрдЧ рд▓реЙрдЧрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рд░реВрдк рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЕрдирд╛рд╡рд╢реНрдпрдХ xml рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП, Nlog рдХрд╛ рд╕рдВрдкреВрд░реНрдг рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЛрдб рдореЗрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:
 private static void ConfigureNlog() { var config = new LoggingConfiguration(); var fileTarget = new FileTarget(); config.AddTarget("file", fileTarget); fileTarget.Layout = @"${longdate} ${message}"; fileTarget.FileName = "${basedir}/" + ExceptionLogFileName; var rule2 = new LoggingRule("*", LogLevel.Trace, fileTarget); config.LoggingRules.Add(rule2); LogManager.Configuration = config; } 

рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдЕрдзрд┐рдХрддрдо рд╕рд░рд▓ рдПрдХреАрдХрд░рдг рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рд╕рднреА рдкреНрд░рдпреБрдХреНрдд рд╡рд┐рдзрд╛рдирд╕рднрд╛рдУрдВ рдХреЛ рдПрдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдореЗрдВ рд╕рдВрдпреЛрдЬрд┐рдд рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ред рдпрд╣ ILMerge рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рдкреЛрд╕реНрдЯ-рдмрд┐рд▓реНрдб рдЗрд╡реЗрдВрдЯ рдореЗрдВ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рджреНрд╡рд╛рд░рд╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:
 if $(ConfigurationName) == Release ( "$(SolutionDir)ILMerge\ILMerge.exe" /out:"$(SolutionDir)Deploy\$(TargetFileName)" "$(TargetDir)*.dll" /target:dll /targetplatform:v4,C:\Windows\Microsoft.NET\Framework64\v4.0.30319 /wildcards ) 



рдЕрдВрддрднрд╛рд╖рдг

рдпрд╣ рд╕рдорд╛рдзрд╛рди рдПрдХ рдХрд╛рдлреА рдмрдбрд╝реА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рд▓рд┐рдП рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рдерд╛, рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ 2 рд╡рд░реНрд╖реЛрдВ рд╕реЗ рдЕрдзрд┐рдХ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рдареАрдХ рдХрд░рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдХрд╛рдлреА рд╕реБрдзрд╛рд░ рд╣реБрдЖ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЖрдк рдкреНрд░рддреНрдпреЗрдХ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреНрд░реИрд╢ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рддреБрд░рдВрдд рд╕реАрдЦрддреЗ рд╣реИрдВ, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕реЗ рдЕрддрд┐рд░рд┐рдХреНрдд рдЕрдзрд┐рд╕реВрдЪрдирд╛ рдХреЗ рдмрд┐рдирд╛ред

рдореБрдЭреЗ рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдпрд╣ рдХрд┐рд╕реА рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реЛрдЧрд╛!
рдЖрдкрдХрд╛ рдзреНрдпрд╛рди рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдк рд╕рднреА рдХрд╛ рдзрдиреНрдпрд╡рд╛рдж!

Source: https://habr.com/ru/post/In222163/


All Articles