我遇到一个问题,一个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(中有两行堆栈跟踪。
我能做些什么来防止这个问题?
编辑使用Windows7似乎有问题。在Win 7上失败的二进制程序将在Win 8.1中正确运行。
我找到了这个问题的原因:
需要以下系统配置来重现问题:
- Windows 7德语版
- 已安装Microsoft.Net Framework 4.5.2(是的,我知道我的二进制文件是根据.Net 4.0编译的(
- KB2901983已安装
有一台只包含.Net Framework而没有KB2901983的机器,该程序运行良好。安装KB2901983后,程序会因相同的二进制文件而失败(无需重新编译(。
我试图卸载KB2901983,但它没有帮助。如果一旦安装,程序就会失败。我在一个干净的Windows7德语版上测试了它。