2012-08-16 94 views
0

我在工作VS2010中使用,并且作为向前移动的测试,我安装了VS2012。安装后的System.Security.VerificationException VS 2012

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

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

这是什么? 为什么安装新的框架会打破所有现有的项目?

如何解决它而不擦除VS2012和.NET 4.5?

感谢您的建议。

+0

你可以发布异常上下文吗? – froeschli 2012-08-16 08:27:14

回答

0

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

要解决此问题,请右键单击您的项目并选择“属性”。在左侧窗格中选择“Build”并将“Platform target:”设置为“Any CPU”

+0

我遇到了同样的问题。我已经定位任何CPU。不过,我也在x64平台上运行,所以我的代码被分成64位。 FluentValidation是否仅支持x86? – 2012-08-16 15:21:09

+0

邑......它只修复了几个项目。主要问题是我们有很多第三方项目是原生的或者已经为x86构建。 – Astellar 2012-08-17 05:34:45

1

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

为了防止我的解释不明显,我们(CLR团队)意识到了这个问题,并且正在积极研究解决方案。

+0

是否已创建一个修复程序? – AndrewS 2012-11-23 04:50:05

+0

修复程序将于明天(2013年8月1日:周二新年快乐补丁!)到达。 – 2013-01-07 22:46:08