AggregateException 的实例导致 TargetInvocationException
Instance of AggregateException causes TargetInvocationException
我有一个问题,AggregateException
的实例在访问图标资源几次后导致 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 中正确 运行。
我找到了这个问题的原因:
重现问题需要以下系统配置:
- Windows 7 德语版
- 安装了 Microsoft .Net Framework 4.5.2(是的,我知道我的二进制文件是针对 .Net 4.0 编译的)
- 已安装 KB2901983
有一台只包含 .Net Framework 而没有 KB2901983 的机器,程序运行良好。安装 KB2901983 后,程序因相同的二进制文件而失败(无需重新编译)。
我尝试卸载 KB2901983,但无济于事。如果它曾经安装过,程序将失败。我在干净的 Windows 7 德文版上对其进行了测试。
我有一个问题,AggregateException
的实例在访问图标资源几次后导致 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 中正确 运行。
我找到了这个问题的原因:
重现问题需要以下系统配置:
- Windows 7 德语版
- 安装了 Microsoft .Net Framework 4.5.2(是的,我知道我的二进制文件是针对 .Net 4.0 编译的)
- 已安装 KB2901983
有一台只包含 .Net Framework 而没有 KB2901983 的机器,程序运行良好。安装 KB2901983 后,程序因相同的二进制文件而失败(无需重新编译)。
我尝试卸载 KB2901983,但无济于事。如果它曾经安装过,程序将失败。我在干净的 Windows 7 德文版上对其进行了测试。