我已经开发了一个 .NET 4 软件,我准备将它发送给测试版用户。如果在软件中抛出未处理的异常,我想捕获它,记录它并将日志发送给我。我已经实现了这个功能,当我在 Visual Studio 的 Debug模式下运行它时,它似乎运行良好。但是,当我构建并安装了该软件的发行版本时,Microsoft .NET Framework 开始在我的代码之前捕获异常。我收到一个带有错误消息的弹出窗口:“您的应用程序的组件中发生了未处理的异常。如果您单击继续,应用程序将忽略此错误并尝试继续。”
为了测试崩溃,我创建了一个抛出异常的崩溃按钮。此崩溃记录自身,异常处理程序记录所有收到的未处理异常。当我查看发布版本的日志时,我只能看到来自崩溃的日志消息,而没有来自异常处理程序的日志消息。
我已经用这段代码附加了我自己的异常处理程序:
AppDomain.CurrentDomain.UnhandledException += CurrentDomain_UnhandledException;
是否有一些方法可以禁用 .NET Framework 的异常捕获,或者是否有更好的方法来附加我自己的异常处理程序?
更新:我正在使用 WPF。我会调查 DispatcherUnhandledException 并让您知道它是否解决了问题。
更新#2:不幸的是,将处理程序添加到 Application.Current.DispatcherUnhandledException 并没有解决问题。显然,这个调试弹出窗口是由 Visual Studio 附带的 JIT(即时)调试器创建的。我将不得不使用“民用”Windows 测试该软件,看看是否也捕获了异常。
更新#3:出于某种原因,使用 Visual Studio 构建的 Release 有效,但使用 MSBuild 脚本和 Dotfuscator 构建的 Release 无效。
最佳答案
您尚未指定您使用的是哪个框架,但周围还有其他“未处理的异常”事件。
对于 Windows 窗体,有 Application.ThreadException
.
对于 WPF/Silverlight,有 Application.DispatcherUnhandledException
.
先尝试这两个中的一个,如果您仍然遇到问题,请告诉我们。
关于c# - 如何禁用 .NET Framework 异常处理并改用我自己的异常处理?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3732823/