强制NCover 1.5.8使用像testdriven.net这样的v4框架吗?

Sam*_*der 19 .net nunit ncover testdriven.net

我想从命令行运行coverage,但似乎无法获得NCover 1.5.8来检测代码.当我使用TestDriven.net运行覆盖测试时,它必须是可行的.差别似乎是TD.NET是能够得到NCover使用的框架4.0(在日志中得到这个在运行时:MESSAGE: v4.0.30319),但在命令行中我不能让它(我得到这个在日志中:MESSAGE: v2.0.50727)

那么如何让NCover在命令行中与nunit一起玩得很好,就像在TD.NET中一样呢?

Sam*_*der 27

经过更多搜索,我发现了这个:

如果您找到此线程,因为您试图让NCover 1.5.8与.NET 4一起使用,那么以下应该修复此错误:

打开命令提示符并键入以下设置COMPLUS_ProfAPI_ProfilerCompatibilitySetting = EnableV2Profiler

这指示.NET 4 CLR加载.NET Framework 2.0 Profiler.

有关详细信息,请参阅:http: //msdn.microsoft.com/en-us/library/dd778910.aspx

这里的线程的末尾

这似乎解决了我的问题

编辑:

它并没有真正解决我的问题.现在它只允许生成coverage.xml,但它只包含v2.0框架程序集,所以只对.net 2.0程序集进行了分析....

哎呀.回到绘图板...

编辑2

哈利路亚!我通过随机谷歌搜索和更改的过程想出了这一点.无论如何,由于这里发现的一些指示,我能够弄明白我需要做的是改变运行代码的应用程序的exe.config(在这种情况下为nunit.console-x86.exe)文件不仅强制要加载的.net框架的特定版本,但也允许使用旧版激活策略.简而言之,我能够通过以下方式解决这个问题:

  • 添加到nunit-console-x86.exe.config以下部分:
<configuration>  
    <startup useLegacyV2RuntimeActivationPolicy="true">  
        <supportedRuntime version="v4.0.30319"/>  
    </startup>  
</configuration>
Run Code Online (Sandbox Code Playgroud)
  • 在启动命令的环境中设置这些:

    set ProfAPI_ProfilerCompatibilitySetting=EnableV2Profiler
    set COMPLUS_ProfAPI_ProfilerCompatibilitySetting=EnableV2Profiler
    (不确定两者都是必要的,但这就是我所做的)

我还为NCover.Console.Exe.config添加了一个类似的设置,但事实证明这是不必要的.

编辑3

这是我正在使用的命令行(请注意,我将所有ncover和nunit以及我的测试程序集复制到一个目录中以简化操作)

NCover.Console.exe nunit-console-x86.exe /framework=4.0.30319 Your.Test.Assembly.dll //x coverage.xml //reg

  • FWIW - 我让这个工作只设置COMPLUS_ProfAPI_ProfilerCompatibilitySetting env并使nunit配置发生变化. (5认同)