Vil*_*nen 11 .net c# windows exception
我已经开发了.NET 4软件,我已准备好将其发送给测试版用户.如果在软件中抛出未处理的异常,我想抓住它,记录它并将日志发送给我.我已经实现了这个功能,当我在Visual Studio的调试模式下运行时,它似乎运行正常.但是,当我构建软件的发行版并安装它时,Microsoft .NET Framework开始在我的代码之前捕获异常.我收到一个错误消息的弹出窗口:"应用程序中的组件中发生了未处理的异常.如果单击继续,应用程序将忽略此错误并尝试继续."
为了测试崩溃,我创建了一个崩溃按钮,它会抛出异常.此崩溃记录自身,异常处理程序记录所有收到的未处理异常.当我查看发布版本的日志时,我只能看到崩溃时的日志消息,而不是异常处理程序中的日志消息.
我用这段代码附加了自己的异常处理程序:
AppDomain.CurrentDomain.UnhandledException += CurrentDomain_UnhandledException;
Run Code Online (Sandbox Code Playgroud)
有没有办法禁用.NET Framework的异常捕获,还是有更好的方法来附加我自己的异常处理程序?
更新:我正在使用WPF.我将查看DispatcherUnhandledException并告诉您它是否解决了问题.
更新#2:不幸的是,向Application.Current.DispatcherUnhandledException添加处理程序并没有解决问题.显然,这个调试弹出窗口是由Visual Studio附带的JIT(实时)调试器创建的.我将不得不用"民用"Windows测试软件,看看是否也有例外.
更新#3:由于某种原因,使用Visual Studio构建的版本可以使用,但是使用MSBuild脚本和Dotfuscator构建的版本不能.
您尚未指定正在使用的框架,但还有其他"未处理的异常"事件.
对于Windows Forms,有Application.ThreadException.
对于WPF/Silverlight,有Application.DispatcherUnhandledException.
首先尝试其中之一,如果您仍然遇到问题,请告诉我们.
我终于解决了这个问题.问题不是由于收听错误的异常引起的,而是由于发布版本中缺少DLL.
在为DispatchedUnhandledException和ThreadException事件添加侦听器后,我不再获得奇怪的Microsoft .NET Framework弹出窗口,该弹出窗口允许用户在异常后继续运行该软件.然而,我自己的异常处理在这一点上仍然被打破.
因为在异常处理程序应该启动的时候软件已经崩溃了,所以我在异常处理程序周围有一个catch(Exception).删除此catch后,我终于获得了发布版本的正确错误消息并添加了缺少的DLL.
我(再次)学到的教训是:不要使用空catch(Exception)块.这是邪恶的.
| 归档时间: |
|
| 查看次数: |
10369 次 |
| 最近记录: |