【问题标题】:How to fix "'System.AggregateException' occurred in mscorlib.dll"如何修复“在 mscorlib.dll 中发生‘System.AggregateException’”
【发布时间】:2012-06-22 17:44:37
【问题描述】:

我在调试时收到未处理的异常,程序停止执行。调试器没有显示该行,所以我不知道要修复什么。

mscorlib.dll 中发生了“System.AggregateException”类型的未处理异常

附加信息:通过等待任务或访问其异常属性未观察到任务的异常。结果,未观察到的异常被终结器线程重新抛出。

无法获取本地或参数“<this>”的值,因为它在该指令指针处不可用,可能是因为它已被优化掉。 System.Threading.Tasks.TaskExceptionHolder

如何解决这个问题?

我还发现this question 非常相似。

【问题讨论】:

  • 当以前没有问题的控制台应用程序在调试运行期间被中断时,我不知何故导致了这个问题。关闭 Visual Studio,然后重新打开它解决了问题,然后运行正常 - 这在所有情况下都没有帮助,但如果应用程序“应该”正常工作,则值得一试。

标签: c# .net exception aggregateexception


【解决方案1】:

正如消息所说,您有一个任务引发了未处理的异常。

打开所有异常(调试、异常)的中断并重新运行程序。
这将向您显示最初引发的原始异常。


(附加注释):在 VS2015(或更高版本)中。选择 Debug > Options > Debugging > General 并取消选择“Enable Just My Code”选项。

【讨论】:

  • 这个设置在哪里?调试 > 异常 > ...?
  • @mdupls:中断所有 CLR 异常。
  • 只需检查所有内容。然后使用“Reset All”恢复默认值。
  • 在 VS2015(企业版)中。选择调试/选项,然后转到“调试/常规”并取消选择“仅启用我的代码”选项。
  • @Lars 您的回答(评论)更正确和最新。所以,我已经附加了
【解决方案2】:

您可以直接处理异常,这样它就不会使您的程序崩溃(捕获AggregateException)。您还可以查看内部异常,这将为您提供更详细的错误解释:

try {
    // your code 
} catch (AggregateException e) {

}

【讨论】:

  • 通常,如果出现问题,您会希望应用程序崩溃。解决问题根源,而不是捕获所有异常。
  • 我在注入实现而不是接口时遇到了类似的异常。
【解决方案3】:

如果您可以轻松重现该问题,则接受的答案将起作用。但是,作为最佳实践,您应该捕获在任务中执行的任何异常(和日志记录)。否则,如果任务中发生任何意外情况,您的应用程序将崩溃。

Task.Factory.StartNew(x=>
   throw new Exception("I didn't account for this");
)

但是,如果我们这样做,至少应用程序不会崩溃。

Task.Factory.StartNew(x=>
   try {
      throw new Exception("I didn't account for this");
   }
   catch(Exception ex) {
      //Log ex
   }
)

【讨论】:

    【解决方案4】:

    就我而言,我在使用 Edge.js 时遇到了这个问题——所有问题都是 C# Edge.js 函数定义中的 JavaScript 语法错误。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-11-15
      • 1970-01-01
      • 2021-09-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-08
      • 1970-01-01
      相关资源
      最近更新 更多