0

我在工作中使用 VS2010,作为前进的测试,我安装了 VS2012。

在这一步之后,所有在停止工作之前正确的项目(已经编译,或者仍然由 VS2010 构建)。

几十个地方出现异常:System.Security.VerificationException。此异常也来自 .NET 3.5 或 .NET 4 上的库。它在 XAML InitializeComponents 等中引发异常。

它是什么?为什么安装新框架会破坏所有现有项目?

如何在不擦除 VS2012 和 .NET 4.5 的情况下解决它?

感谢您的建议。

4

3 回答 3

1

问题的根源(仅影响 32 位)是,如果构造函数在调用 base/this 构造函数之前有任何程序流(在 IL 级别),则代码将不正确地验证失败。WPF 中使用了一些相对常见的类型,?:它们在调用 base/this 的参数中具有操作,因此您根本不能使用那些特定的构造函数。我只看到它在 Lazy 和 ObservableCollection 上失败了。这两种类型都有一些不包含流的构造函数,因此解决方法是将构造函数调用更改为使用无参数版本。另一种情况(与 FluentValidation 一起出现的情况)是,当您的构造函数中有 lambda 时,C# 编译器会插入流。解决方法是改为使用 lambda 的实际方法。

万一从我的解释中看不出来,我们(CLR 团队)已经意识到了这个问题,并且正在积极寻找解决方案。

于 2012-08-27T20:34:36.050 回答
0

您是否使用对 FluentValidation.dll 的引用?如果是,请查看我昨天创建的这篇文章。这可以帮助VerificationException 问题

于 2012-08-17T06:35:26.060 回答
0

我遇到了同样的异常,并将其缩小到使用 FluentValidation 的单元测试。事实证明,我的测试项目构建为 x86,它需要是 x64。

要解决此问题,请右键单击您的项目并选择属性。在左侧窗格中选择“构建”并将“平台目标:”设置为“任何 CPU”

于 2012-08-16T13:30:39.493 回答