1

我有一个问题,在几次访问 Icon 资源后,一个实例AggregateException会导致 a 。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 中正确运行。

4

1 回答 1

0

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

重现该问题需要以下系统配置:

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

拥有一台仅包含没有 KB2901983 的 .Net Framework 的机器,该程序可以正常工作。安装 KB2901983 后,程序因相同的二进制文件失败(无需重新编译)。

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

于 2015-05-20T09:51:55.467 回答