2011-02-07 11 views
19

Chcę uruchomić zasięg z wiersza poleceń, ale nie można uzyskać programu NCover 1.5.8 do instrumentowania kodu. To musi być możliwe, ponieważ kiedy przeprowadzam testy zasięgu z TestDriven.net, to działa. Różnica polega na tym, że TD.NET jest w stanie przekonać NCover do korzystania z frameworka 4.0 (otrzymujesz to w logu, gdy działa: MESSAGE: v4.0.30319), ale z wiersza poleceń nie mogę tego zrobić (otrzymuję to w logu: MESSAGE: v2.0.50727)Force NCover 1.5.8 używać framework v4 jak robi to testdriven.net?

W jaki sposób mogę sprawić, aby gra NCover była przyjemna dla Nunit z linii poleceń, tak jak w przypadku TD.NET?

Odpowiedz

27

po dalszych poszukiwaniach znalazłem to:

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

na końcu gwintu here

który wydaje się rozwiązać mój problem

EDIT:

nie robi” t naprawdę rozwiązać mój problem. Teraz pozwala tylko na generowanie pliku coverage.xml, ale zawiera tylko zespoły szkieletów v2.0, więc profilowane są tylko zespoły .net 2.0 ....

Grrr. z powrotem do deski kreślarskiej ...

EDIT 2

Alleluja! Zorientowałem się o tym poprzez proces losowego szukania i zmiany. w każdym razie, ze względu na niektóre wskaźniki znalezione here udało mi się dowiedzieć, że to, co musiałem zrobić, to zmienić exe.config aplikacji uruchamiającej kod (plik nunit.console-x86.exe w tym przypadku), aby nie tylko wymusić konkretna wersja frameworka .net, która ma być załadowana, ale także w celu umożliwienia użycia starszej zasady aktywacji. Aby wyciąć długie opowiadanie udało mi się rozwiązać ten problem:

  • dodanie do nunit-konsoli-x86.exe.config następującą sekcję:
<configuration> 
    <startup useLegacyV2RuntimeActivationPolicy="true"> 
     <supportedRuntime version="v4.0.30319"/> 
    </startup> 
</configuration> 
  • Ustawienie tych w środowisku, że polecenie jest uruchamiane z:

    set ProfAPI_ProfilerCompatibilitySetting=EnableV2Profiler
    set COMPLUS_ProfAPI_ProfilerCompatibilitySetting=EnableV2Profiler
    (nie wiem, obie są konieczne, ale to, co zrobiłem)

Dodałem też podobną ustawienia do NCover.Console.Exe.config, ale okazuje się, że to niepotrzebne.

EDIT 3

to jest wiersz polecenia używam (zauważ, że skopiowałem wszystkie NCover i NUnit i moich zestawów testowych w jednym katalogu, aby uprościć)

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

+0

Czy mógłbyś pokazać całą używaną linię komend? Próbuję to zrobić, ale nie otrzymam ncover 1.5.8, aby profilować mój kod 4.0. Zdecydowałem się opuścić Gallio i po prostu użyć wywołania ncover.console z linii poleceń i zlecić mi przeprowadzenie badań z zakamarkami ... ale nie mogę się doczekać. Spędziłem prawdopodobnie około sześciu godzin na tym i to jest strasznie frustrujące ... –

+0

@Peter zaktualizował odpowiedź. –

+0

dzięki, spróbuję jeszcze raz naprawdę ciężko. nie mogę uwierzyć, jak trudno to jest skonfigurować ... –

4

Mogłem źle zrozumieć twój problem, ale jeśli próbujesz wymusić uruchomienie NCover w środowisku wykonawczym .NET 4.0, możesz spróbować umieścić element supportedRuntime w pliku konfiguracyjnym.

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

To wymusi .NET 4.0 na pliku wykonywalnym bez potrzeby jego odbudowywania.

+0

dzięki . Próbowałem tego, ale podczas gdy działa to ncover i ncover działa nunit nie wydaje się możliwe, aby połączyć profiler, a ncover po prostu zawiesza się i otrzymuję "Zakończono proces profilowania. Połączenie Profiler nie zostało nawiązane. "Po przeprowadzeniu testów nunitów, a dzienniki i plik pokrycia nie są aktualizowane ... –

+0

Przegłosowałem to tak, jak było na właściwym torze i było ostatecznie pomocne. odpowiedź polegała na uruchomieniu NUnit w środowisku wykonawczym .NET 4.0 oraz dodaniu atrybutu 'useLegacyV2RuntimeActivationPolicy =" true "' do elementu 'startup' w pliku konfiguracyjnym. Zobacz moją odpowiedź poniżej. dzięki za pomoc. –

+0

Dzięki za porady, nocver ​​w końcu działał, ale generowany zasięg wynosił 0%, co jest niewłaściwe. Korzystam z .net 4.5.2 i nunit 2.6.3 Jakieś pomysły? – user448070