环境:

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文件中设置标志。否则,您必须使用其他方法之一来设置标志,如上面链接的文章中所述。

10-07 14:45