【发布时间】:2011-04-13 13:36:45
【问题描述】:
我已经开发了一个 .NET 4 软件,我准备将它发送给 beta 用户。如果软件中抛出未处理的异常,我想捕获它,记录它并将日志发送给我。我已经实现了这个功能,当我使用 Visual Studio 在调试模式下运行它时,它似乎运行良好。但是,当我构建并安装了该软件的发布版本时,Microsoft .NET Framework 开始在我的代码之前捕获异常。我收到一条带有错误消息的弹出窗口:“您的应用程序的组件中发生未处理的异常。如果您单击继续,应用程序将忽略此错误并尝试继续。”
为了测试崩溃,我创建了一个引发异常的崩溃按钮。此崩溃记录自身,异常处理程序记录所有收到的未处理异常。当我查看发布版本的日志时,我只能看到崩溃的日志消息,而不能看到异常处理程序的日志消息。
我已经用这段代码附加了我自己的异常处理程序:
AppDomain.CurrentDomain.UnhandledException += CurrentDomain_UnhandledException;
有什么方法可以禁用 .NET Framework 的异常捕获,还是有更好的方法来附加我自己的异常处理程序?
更新:我正在使用 WPF。我将研究 DispatcherUnhandledException 并让您知道它是否解决了问题。
更新 #2: 不幸的是,将处理程序添加到 Application.Current.DispatcherUnhandledException 并没有解决问题。显然,此调试弹出窗口是由 Visual Studio 中包含的 JIT(即时)调试器创建的。我将不得不使用“平民”Windows 测试该软件,看看那里是否也捕获了异常。
更新 #3: 出于某种原因,使用 Visual Studio 构建的版本可以工作,但使用 MSBuild 脚本和 Dotfuscator 构建的版本不能。
【问题讨论】:
-
在 WPF/Silverlight 中,设置 e.Handled = true 以防止异常继续向上堆栈。
-
我还没能解决这个问题。当我这样做时,我会在这里发布答案。