AggregateException的实例导致TargetInvocationException

时间:2015-05-18 10:05:39

标签: c# winforms resources icons targetinvocationexception

我遇到一个问题,AggregateException的实例在对Icon资源进行几次访问后会导致TargetInvocationException

我将问题分解为以下步骤以重现(.Net 4.0完整版或客户端配置文件):

  • 创建一个新的WinForms应用程序(控制台应用程序不起作用)
  • 将任意图标(.ico文件)添加到资源
  • 将以下代码添加到构造函数中:

    new AggregateException();
    for (var i = 0; ; ++i)
    {
      var icon = Resources.Certificate;
    }
    

您必须将资源名称更改为资源名称。

这就是全部。 是的我知道这个样本没有意义。这只是为了说明问题。我的工作代码要复杂得多,所有这些代码都是必需的。

如果不创建此版本,应用程序将会正常工作。但是,如果创建了此异常,则对TargetInvocationException的资源访问将失败。 InnerException告诉我操作已成功完成(?!?!),在System.Drawing.Icon(ctor + Initialize)中有两行堆栈跟踪。

我该怎么做才能防止这个问题?

修改 使用Windows 7似乎是一个问题。在Win 7上失败的二进制文件将在Win 8.1中正确运行。

1 个答案:

答案 0 :(得分:0)

我找到了这个问题的原因:

需要以下系统配置才能重现此问题:

  • Windows 7德语版
  • 安装了Microsoft .Net Framework 4.5.2(是的,我知道我的二进制文件是针对.Net 4.0编译的)
  • 已安装KB2901983

如果一台机器只包含没有KB2901983的.Net Framework,那么程序运行正常。安装KB2901983后,程序对同一个二进制文件失败(无需重新编译)。

我尝试卸载KB2901983,但它没有帮助。如果它一旦安装,程序将失败。我在干净的Windows 7德语版上进行了测试。