OpenCover版本4.6.519投掷System.InvalidProgramException:公共语言运行时检测到一个无效的程序

问题描述:

环境:OpenCover版本4.6.519投掷System.InvalidProgramException:公共语言运行时检测到一个无效的程序

C#6

的.NET Framework 4.6.1

NUnit的控制台2.6.3


我正在运行以下命令在我的构建上创建测试覆盖范围:

“C:\ Program Files(x86)\ OpenCover.4.6.519 \ OpenCover.Console.exe”-target:“C:\ Program Files(x86)\ NUnit 2.6.3 \ bin \ nunit-console。 EXE” -targetargs: “/ NOLOGO/noshadow \ UnitTests.nunit /xml=UnitTestResults.xml” -register -output:RawCoverageReport.xml -filter: “+ [一些名称] - [一些名称]

但是,它打破了我在这个版本的OpenCover上的构建。在以前的版本中,构建不会破坏构建单元测试,但不会创建任何测试覆盖率。任何线索?

System.InvalidProgramException:公共语言运行时检测到一个无效的程序

谢谢大家的帮助!

虽然与OpenCover无关,但在使用EXSLT库执行某些XSL转换时,我们在安装.NET 4.6.1后开始看到相同的异常。

经过一番调查并重新安装.NET框架的增量版本后,我们开始发现安装.NET 4.6时的错误。

根据此document,一旦安装了4.6,默认情况下会使用新的JIT编译器。通过将以下条目添加到app.config文件中,可以基于每个应用程序禁用此功能。

<configuration> 
    <runtime> 
    <useLegacyJit enabled="1" /> 
    </runtime> 
</configuration> 

设置此标志后,停止发生异常,不会使异常再次出现。

因此,假设您的问题具有相同的原因,则在运行OpenCover时需要切换到传统的JIT编译器。希望你可以在OpenCover app.config文件中设置标志。否则,您将不得不使用其他方法之一来设置标志,如上面链接的文章中所述。