为什么我的测试因System.Security.VerificationException而失败?

时间:2010-10-12 17:27:29

标签: .net visual-studio-2010 .net-4.0 mstest

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

  

System.Security.VerificationException:   行动可能破坏稳定   运行时。

我一直无法确定发生此异常的原因。当我在调试模式下运行时,测试运行正常。

整个解决方案可供下载here

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

3 个答案:

答案 0 :(得分:4)

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

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

并重新启动代码覆盖率。

答案 1 :(得分:1)

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

第二步:你能给我们堆栈跟踪或异常输出吗?有一次我真的看到了这个错误是在.net 2中并且是一个编译器错误 - 我不得不稍微改变代码以使调用编译为虚拟而不是直接调用。给我们提供有问题的堆栈和代码行将会很有帮助。

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

答案 2 :(得分:0)

我在寻找从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

我希望这可以为其他人节省大量时间