我想从命令行运行覆盖,但似乎无法获得NCover 1.5.8来检测代码。当我使用TestDriven.net运行覆盖测试时,它必须是可行的。区别似乎是TD.NET能够让NCover使用框架4.0(你在日志运行时得到这个:MESSAGE: v4.0.30319
)但是从命令行我无法做到(我得到了这个)在日志中:MESSAGE: v2.0.50727
)
那么如何让NCover在命令行中使用nunit,就像使用TD.NET一样?
答案 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框架,还要允许使用旧版激活策略。简而言之,我能够通过以下方式解决这个问题:
<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而无需重建它。