2011-02-07 58 views
19

我想從命令行運行覆蓋率,但似乎無法獲得NCover 1.5.8來檢測代碼。當我使用TestDriven.net運行覆蓋測試時,它一定可行。差異似乎是TD.NET能夠讓NCover使用框架4.0(當它運行時你在日誌中得到這個:MESSAGE: v4.0.30319)但是從命令行我不能做到這一點(我在日誌中得到這個: MESSAGE: v2.0.50727強制NCover 1.5.8使用像testdriven.net一樣的v4框架嗎?

那麼我怎麼能讓NCover和命令行的nunit一起玩,就像它和TD.NET一樣呢?

回答

27

經過搜索,我發現這一點:

If you have found this thread because you are trying to get NCover 1.5.8 to work with .NET 4 then the following should fix this error:

Open a command prompt and type the following set COMPLUS_ProfAPI_ProfilerCompatibilitySetting=EnableV2Profiler

This instructs the .NET 4 CLR to load the .NET Framework 2.0 Profiler.

For more information see: http://msdn.microsoft.com/en-us/library/dd778910.aspx

在螺紋here

這似乎解決我的問題

編輯結束:

它不」真的解決我的問題。現在它只是允許生成coverage.xml,但它只包含v2.0框架程序集,因此只有.net 2.0程序集可以進行概要分析....

Grrr。回到繪圖板...

EDIT 2

哈利路亞!我已經通過隨機搜索和更改的過程瞭解了這一點。無論如何,由於一些指針發現here我能夠弄清楚,我需要做的是改變運行代碼的應用程序的exe.config(在這種情況下nunit.console-x86.exe)文件不僅強制要加載的.net框架的特定版本,還要允許使用舊版激活策略。爲了削減長話短說我能夠解決這個:

  • 添加到NUnit控制檯-x86.exe.config以下部分:
<configuration> 
    <startup useLegacyV2RuntimeActivationPolicy="true"> 
     <supportedRuntime version="v4.0.30319"/> 
    </startup> 
</configuration> 
  • 設置這些

    set ProfAPI_ProfilerCompatibilitySetting=EnableV2Profiler
    set COMPLUS_ProfAPI_ProfilerCompatibilitySetting=EnableV2Profiler:在環境中的命令是從啓動3210 (不知道兩者都是必要的,但是這就是我所做的)

我還添加了一個類似的設置到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

4

我可能誤解了你的問題,但如果你試圖迫使NCover在.NET 4.0運行時上運行,你可以嘗試將supportedRuntime元素放置在它的配置文件。

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

這將強制執行.NET 4.0而不需要重新編譯它。

+0

感謝命令行。我試過這個,但是當它運行ncover和ncover運行nunit時,它似乎不可能連接分析器,並且ncover只是掛起而我得到了`異常終止的進程。探測器連接未建立.`運行nunit測試後,日誌和覆蓋率文件未更新... – 2011-02-07 14:05:52

+0

我對此進行了升級,因爲它沿着正確的軌道行進,最終有幫助。答案是讓NUnit在.NET 4.0運行時運行,並在配置文件的`startup`元素中添加'useLegacyV2RuntimeActivationPolicy =「true」`屬性。請參閱下面的答案。感謝您的幫助。 – 2011-02-08 08:11:31