c# - 如何禁用 .NET Framework 异常处理并改用我自己的异常处理?

标签 c# .net windows exception

我已经开发了一个 .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/

相关文章:

c# - 正确使用 BeginReceive/EndReceive?

c# - ASP.NET 从 WebService 获取项目并插入到 dropDownList

c# - 如何将注意力集中在 WPF 桌面应用程序上?

windows - 我可以将 Windows 身份验证与 ASP.Net Identity 一起使用吗?

windows - 通过 CMD 批处理文件卸载 Windows 更新

c# - 绑定(bind)一个下拉列表,然后添加一个新的列表项

c# - 如何使用采用 XDocument 的构造函数将 XML 反序列化为对象?

c# - WindowsService的简单安装

c# - 什么是独立应用程序?

java - 没有 java 就无法运行 izpack 安装程序