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

时间:2011-02-07 12:46:49

标签: .net nunit testdriven.net ncover

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

那么如何让NCover在命令行中使用nunit,就像使用TD.NET一样?

2 个答案:

答案 0 :(得分: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

在帖子here

的末尾

似乎解决了我的问题

编辑

它确实无法解决我的问题。现在它只允许生成coverage.xml,但它只包含v2.0框架程序集,所以只对.net 2.0程序集进行了分析....

哎呀。回到绘图板......

编辑2

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

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

    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

答案 1 :(得分:4)

我可能误解了您的问题,但是如果您试图强制NCover在.NET 4.0运行时中运行,您可以尝试将supportedRuntime元素放在其配置文件中。

<configuration>
  <startup>
    <supportedRuntime version="v4.0.30319"></supportedRuntime>
  </startup>
</configuration>

这将强制执行.NET 4.0而无需重建它。