19

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

那么我怎样才能让 NCover 从命令行与 nunit 一起玩得很好,就像在 TD.NET 中一样呢?

4

2 回答 2

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>
  • 在启动命令的环境中设置这些:

    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

于 2011-02-07T14:14:56.713 回答
4

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

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

这将强制 .NET 4.0 在可执行文件上运行,而无需重新构建它。

于 2011-02-07T13:11:59.243 回答