我正在将我的一个项目从VS2008迁移到VS2010。现在,当我运行测试工具时,我将解决方案中的所有项目转换为.NET 4.0(客户端配置文件),几乎所有测试都失败并出现以下异常:
System.Security.VerificationException: 行动可能破坏稳定 运行时。
我一直无法确定发生此异常的原因。当我在调试模式下运行时,测试运行正常。
整个解决方案可供下载here。
有人能指出我正确的方向吗?
答案 0 :(得分:4)
问题似乎与您激活的代码覆盖率有关。禁用代码覆盖可解决此问题。您可以将以下内容放在AssemblyInfo.cs中:
[assembly: SecurityRules(SecurityRuleSet.Level1, SkipVerificationInFullTrust = true)]
并重新启动代码覆盖率。
答案 1 :(得分:1)
第一步:针对构建的程序集(测试和应用程序)运行peverify tool。它可能会为您提供一些有助于查明问题的输出。
第二步:你能给我们堆栈跟踪或异常输出吗?有一次我真的看到了这个错误是在.net 2中并且是一个编译器错误 - 我不得不稍微改变代码以使调用编译为虚拟而不是直接调用。给我们提供有问题的堆栈和代码行将会很有帮助。
我想指出的一件事是,在4.0客户端配置文件下运行的应用程序具有与在3.5下运行时不同的安全行为。您可以尝试将[assembly: SecurityRules(SecurityRuleSet.Level1)]
添加到assemblyinfo.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
我希望这可以为其他人节省大量时间