2

我有一个 Windows 窗体应用程序。它使用 Assembly.LoadFile 加载扩展名为 .Plugin.dll 的程序集。这些“插件”之一调用另一个程序集 dll。该 dll 最终会引发 ValidationException 异常。引发异常的方法位于从 IDataErrorInfo 继承的类中。此类是包含在 Linq to SQL 类 (.dbml) 中的类。在“插件”中,我调用 DataContext.SubmitChanges。这被包装在一个 try/catch 块中。这会导致我的业务逻辑在提交到 OnValidate 覆盖中的数据库之前验证数据。我看到的结果是,在抛出 ValidationExeption 之后,调试器停止在 OnValidate 方法的底部,表明发生了未处理的异常。如果我继续运行该应用程序,我的 catch 块将被执行。

4

2 回答 2

0

我 99% 确定您的“真正”异常确实没有得到处理——这是调试器首先告诉您的,他通常是对的。

之后,当您继续在 VS 中运行应用程序时,实际上不会在您从调试器中执行 exe 时发生。事实上,调试器首先会通知您未处理的异常,然后继续执行一些挂起的逻辑(如果有)(这就是您看到 ValidationException 错误的原因)。但是未处理的异常仍然存在。我不完全知道这种行为的细节和原因,但我多次注意到这一点。

在识别出未处理异常后,您必须在引发未处理异常的精确位置捕获精确错误。也许发布您的代码示例会有所帮助。

于 2012-02-01T19:38:08.667 回答
0

首先,插件是否在同一个 AppDomain 中?

其次,听起来你让调试器“在抛出异常时中断”而不是“在用户未处理异常时中断”。

在 VS.NET 中,转到 Debug --> Exceptions...

展开“Common Language Runtime Exceptions”节点并查看是否有勾选。

于 2012-02-01T21:41:28.113 回答