代码之家  ›  专栏  ›  技术社区  ›  Dave Van den Eynde

为什么我的测试在System.Security.VerificationException中失败?

  •  3
  • Dave Van den Eynde  · 技术社区  · 14 年前

    我正在将我的一个项目从VS2008迁移到VS2010。现在,当我运行测试工具时,我将解决方案中的所有项目都转换为.NET 4.0(客户端配置文件),几乎所有测试都失败,并出现以下异常:

    System.Security.VerificationException(系统安全验证例外): 操作可能会破坏 运行时。

    我无法确定为什么会发生这种异常。当我以调试模式运行测试时,它们运行得很好。

    整个解决方案可供下载 here .

    有人能给我指出正确的方向吗?

    3 回复  |  直到 11 年前
        1
  •  4
  •   Darin Dimitrov    14 年前

    问题似乎与您激活的代码覆盖率有关。禁用代码覆盖率解决了这个问题。您可以在assemblyinfo.cs中放置以下内容:

    [assembly: SecurityRules(SecurityRuleSet.Level1, SkipVerificationInFullTrust = true)]
    

    并重新激活代码覆盖率。

        2
  •  1
  •   Philip Rieck    14 年前

    第一步:运行 peverify tool 针对已构建的程序集(测试和应用程序)。它可能会为您提供一些有助于查明问题的输出。

    第二步:您能给我们堆栈跟踪或异常输出吗?有一次我在.NET 2中看到了一个错误,这是一个编译器错误——我必须稍微修改代码,使调用编译为一个虚拟调用,而不是直接调用。给我们提供栈和相关的代码行是有帮助的。

    我想指出的一点是,在4.0客户机配置文件下运行的应用程序与在3.5下运行的应用程序具有不同的安全行为。您可以尝试添加 [assembly: SecurityRules(SecurityRuleSet.Level1)] 到assemblyinfo.cs,在“旧样式”规则下运行,以帮助缩小范围。

        3
  •  0
  •   Arkaine55 DiGi    11 年前

    在从TFS2010升级到TFS2012构建服务器的过程中,我在寻找一个非常类似的问题的答案时遇到了这个问题。

    我们的项目已经以.NET 4.0为目标,并且在升级之前单元测试正在工作。

    由于.NET 4.5是就地升级,Microsoft引入的.NET 4.5错误可能会在.NET 4.0目标项目中导致此问题。它可能与SecurityRules答案相关,但与框架DLL内部相关(如Microsoft.VisualStudio.QualityTools.UnitTestFramework)。

    对于我们来说,下面链接的热修复修复修复了“操作可能会破坏运行时的稳定性”。在其他工作单元测试中的异常。

    http://support.microsoft.com/kb/2748645

    我希望这能节省别人很多时间