【问题标题】:System.Security.VerificationException after installation VS 2012安装 VS 2012 后的 System.Security.VerificationException
【发布时间】:2012-08-16 08:21:20
【问题描述】:

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

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

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

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

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

感谢您的建议。

【问题讨论】:

  • 你能发布异常上下文吗?

标签: .net


【解决方案1】:

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

以防我的解释不明显,我们(CLR 团队)已经意识到这个问题并正在积极寻找解决方案。

【讨论】:

  • 已经创建修复了吗?
  • 修复将于明天到达(2013 年 1 月 8 日:周二快乐新年补丁!)。
【解决方案2】:

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

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

【讨论】:

  • 我遇到了同样的问题。我已经针对任何 CPU。但是我也在 x64 平台上运行,所以我的代码被 jitted 到 64 位。 FluentValidation 是否只支持 x86?
  • 是的......它只修复了几个项目。主要问题是我们有很多原生的或已经为 x86 构建的 3rd 方项目。
【解决方案3】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多