Why do my tests fail with System.Security.VerificationException?

后端 未结 3 1237
醉梦人生
醉梦人生 2020-12-18 10:23

I\'m in the process of migrating one of my projects from VS2008 to VS2010. Now that I converted all of my projects in the solution to .NET 4.0 (Client Profile) when I run th

相关标签:
3条回答
  • 2020-12-18 11:02

    I came across this question while looking for an answer to the a very similar problem during an upgrade from a TFS2010 to TFS2012 build server.

    Our projects were already targeting .Net 4.0 and unit tests were working before the upgrade.

    Since .Net 4.5 is an in-place upgrade, a .Net 4.5 bug introduced by Microsoft might cause this issue in .Net 4.0 targeted projects. It is probably related to the SecurityRules answer, but internal to framework dlls (like Microsoft.VisualStudio.QualityTools.UnitTestFramework).

    For us the hotfix linked below fixed the "Operation could destabilize the runtime." exceptions in what were otherwise working unit tests.

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

    I hope this saves somebody else ALOT of time

    0 讨论(0)
  • 2020-12-18 11:09

    The problem seems to be related to the Code Coverage you activated. Disabling code coverage solves the issue. You could put the following in your AssemblyInfo.cs:

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

    and reactivate code coverage.

    0 讨论(0)
  • 2020-12-18 11:11

    First step: Run the peverify tool against the built assemblies (both test and application). It may give you some output that helps pinpoint the issue.

    Second step: Can you give us the stack trace or exception output? The one time I actually saw an error with this was in .net 2 and was a compiler error - I had to slightly alter the code to make a call compile as a virtual rather than direct call. Giving us the stack and the lines of code in question would be helpful.

    One thing I want to point out is that apps running under the 4.0 client profile have different security behaviors than running under 3.5. You could try adding [assembly: SecurityRules(SecurityRuleSet.Level1)] to your assemblyinfo.cs to run under the "old style" rules to help narrow it down.

    0 讨论(0)
提交回复
热议问题