2011-02-07 2 views
19

Я хочу запустить покрытие из командной строки, но не могу заставить NCover 1.5.8 обрабатывать код. Это должно быть возможно, так как при выполнении тестов на покрытие TestDriven.net это работает. разница в том, что TD.NET может заставить NCover использовать фреймворк 4.0 (вы получаете это в журнале при запуске: MESSAGE: v4.0.30319), но из командной строки я не могу его сделать (я получаю это в журнале: MESSAGE: v2.0.50727)Force NCover 1.5.8 использовать v4 framework, как testdriven.net?

Итак, как я могу заставить 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

, который, кажется, чтобы решить мою проблему

EDIT:

это Безразлично» Решить мою проблему действительно. Теперь он просто позволяет создавать cover.xml, но он содержит только сборки v2.0, поэтому только профили .net 2.0 профилируются ....

Grrr. вернуться к чертежной доске ...

EDIT 2

Аллилуйя! Я понял это из-за процесса случайного googling и изменения. в любом случае из-за некоторых указателей, найденных 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
    (не уверен, что обе необходимы, но это то, что я сделал)

Я также добавил подобную установку в NCover.Console.Exe.config, но оказывается, что не является необходимым.

EDIT 3

это командная строка, я использую (обратите внимание, что я скопировал все NCover и NUnit и моих тестовых сборок в один каталог, чтобы упростить вещи)

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

+0

Не могли бы вы показать всю командную строку, которую используете? Я пытаюсь следовать этому, но не могу получить ncover 1.5.8 для профилирования моего кода 4.0. Я решил вытолкнуть Gallio и просто запустил ncover.console из командной строки и запустил мои тесты nunit с покрытием ... но я не могу никуда уйти. Я потратил, вероятно, около шести часов на это уже, и это ужасно расстраивает ... –

+0

@Peter обновил ответ. –

+0

спасибо, попробуй еще раз очень тяжело. я не могу поверить, как сложно это настроить ... –

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, и журналы и файл покрытия не обновляются ... –

+0

Я поддержал это, как было по правильному пути, и был в конечном итоге полезен. ответ заставлял NUnit работать в среде выполнения .NET 4.0, а также добавлял атрибут 'useLegacyV2RuntimeActivationPolicy =" true "' к элементу 'startup' в файле конфигурации. См. Мой ответ ниже. спасибо за помощь, хотя. –

+0

Спасибо за советы, nocver, наконец, побежал, но сгенерированное покрытие было 0%, что неверно. Я использую .net 4.5.2 и nunit 2.6.3 Любые идеи? – user448070

Смежные вопросы