【问题标题】:.NET How to catch precaught exceptions on separate class/form.NET 如何在单独的类/表单上捕获预先捕获的异常
【发布时间】:2018-10-06 09:39:24
【问题描述】:

我有一个非常大的应用程序,我不想重写它。

我创建了一个 dll/类,它记录了在应用程序的主 MDI 中打开和关闭的每个表单(不向应用程序本身添加超过 5 行)。 我为此任务使用了 IMessageFilter/PreFilterMessage 和其他几个技巧

现在我想在其中添加代码,以记录在这些表单中捕获的所有异常。 (无需修改所有内容)。

这个 DLL 一旦完成将被移动到多个项目,因此我不能在主应用程序中进行太多编辑,或者使 DLL 应用程序特定。

基本上,当应用程序中某处的异常被处理时,我希望我的 DLL 知道它。

有什么想法吗? (除了“你不能那样做”)

【问题讨论】:

  • 您是否在主应用程序中引用上述 DLL?您的应用程序中是否有常见的错误处理程序方法?如果是这样,为什么不在所述公共错误处理程序中调用所引用的 DLL 中传递异常对象的方法呢?这种方式不是特定于应用程序的(引用所述 dll 的每个其他应用程序都可以传递要记录的异常),您需要进行少量修改。
  • 您也许可以通过某种方式使用PostSharp,但本机无法知道异常被抛出并在其他地方捕获。
  • AppDomain.FirstChanceException 不是您要找的吗?
  • 关于FirstChanceException的文章:visualstudiomagazine.com/articles/2017/05/01/…
  • 谢谢大家,我会看看这个第一次机会异常——我真的对阅读我们向用户显示的已经捕获的异常更感兴趣。当前的应用程序有许多小部分是由几个开发人员在过去 5 年中构建的,因此没有通用的错误处理程序方法。唯一常见的代码是 (try..catch ex as exception) 块。希望每次在某处触发时复制 ex.tostring 。其他应用程序可能有一个常见的错误处理程序,但我试图使其尽可能通用

标签: c# .net vb.net error-handling exception-handling


【解决方案1】:

您可以使用 Logger 库。这个库提供了简单的日志记录。

【讨论】:

  • 因为你提到了一个库(或者可能是一种库?)而没有链接到它,你说它提供了简单的日志记录,这不是 OP 想要的,你也没有澄清它的原因“easy”(几乎所有日志库都易于使用)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-11-24
  • 2011-11-24
相关资源
最近更新 更多