OpenCover не распространяется под TeamCity

У меня есть проект, который НЕ дает мне никакого покрытия в выходном файле покрытия при работе в TeamCity. Когда я запускаю из командной строки, все нормально. По-видимому, существует некоторая проблема с правами доступа к учетной записи локальной системы, которая используется при запуске TeamCity, т. е. если я изменю исполнителя TeamCity, чтобы использовать один из логинов, которые я использую для доступа к машине, он дает покрытие. Однако я не хочу сохранять пароль этого пользователя в службе TeamCity.

Я использую параметр -register:user при отключении OpenCover в сценарии nant, это не помогает.

Какова рекомендуемая настройка для обеспечения работы покрытия при работе в TeamCity?


person Orn Kristjansson    schedule 20.08.2012    source источник
comment
Пробовали ли вы предварительно зарегистрировать профилировщик с помощью regsvr32 вручную?   -  person Pavel Bakshy    schedule 21.08.2012
comment
Можете ли вы превратить свой комментарий в ответ, это сработало. Сначала я попытался просто зайти в приглашение DOS и зарегистрировать › regsvr32 OpenCover.Profiler.dll, который не работал, выдал мне ошибку 0x80070005 Хитрость заключалась в том, чтобы открыть командную строку DOS от имени администратора, затем снова запустить regsvr32 и вуаля. После этого я запустил сборку в TeamCity, и появилось покрытие.   -  person Orn Kristjansson    schedule 22.08.2012


Ответы (2)


Предварительно зарегистрируйте OpenCover.Profiler.dll с помощью regsvr32 вручную. Но чтобы выполнить это, вы должны запустить cmd с правами администратора.

person Pavel Bakshy    schedule 21.08.2012
comment
Да, действительно - сначала я попытался просто зайти в приглашение DOS и зарегистрировать › regsvr32 OpenCover.Profiler.dll, который не работал, выдал мне ошибку 0x80070005 Хитрость заключалась в том, чтобы открыть командную строку DOS от имени администратора, затем снова запустить regsvr32 и вуаля. После этого я запустил сборку в TeamCity, и появилось покрытие. - person Orn Kristjansson; 22.08.2012
comment
Я полагаю, что это задокументировано в документации OpenCover, поставляемой с OpenCover (zip, msi). - person Shaun Wilde; 27.08.2012

Недавно я установил это с помощью MSBuild, и он отлично работает. Вот соответствующие части моего сценария MSBuild:

<Project DefaultTargets="Build;Test;Archive;" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">

    <UsingTask AssemblyFile=
        "..\..\tools\MSBuildCommunityTasks\MSBuild.Community.Tasks.dll"
        TaskName="MSBuild.Community.Tasks.Xslt" />

  <PropertyGroup>
    <!--Default Configuration-->
    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>

    <!--Default Platform-->
    <Platform Condition=" '$(Platform)' == '' ">"Any CPU"</Platform>

    <!--Test assemblies-->
    <TestAssemblies>HelloWorld.Mvc3UI.UnitTests\bin\$(Configuration)\HelloWorld.Mvc3UI.UnitTests.dll</TestAssemblies>

  </PropertyGroup>

  <Target Name="Build">
    <MSBuild Targets="Clean;Rebuild" Projects="HelloWorld.sln"  ContinueOnError="false"/>
  </Target>

    <Target Name="Test">

        <!-- Check Code Coverage -->
        <Exec Command="..\..\tools\OpenCover.4.0.519\OpenCover.Console.exe -register:user -target:..\..\tools\NUnit\nunit-console.exe -targetargs:&quot;$(TestAssemblies) /xml=NUnitReport.xml /noshadow&quot; -filter:&quot;+[HelloWorld.Mvc3UI*]* -[HelloWorld.Mvc3UI.UnitTests*]*&quot; -output:OpenCoverReport.xml"></Exec>
        <!-- Format Code Coverage Report -->
        <Exec Command="..\..\tools\ReportGenerator.1.5.0.0\ReportGenerator.exe OpenCoverReport.xml OpenCoverReport"></Exec>

        <Xslt Inputs="NUnitReport.xml"
            Xsl="..\..\tools\NUnit\NUnitReport.xsl"
            Output="NUnitReport.html" />
    </Target>

    <Target Name="Archive">
        <Exec Command="..\..\tools\7-Zip.9.20\7za.exe a build.zip &quot;HelloWorld.Mvc3UI\*&quot;"></Exec>
    </Target>

</Project>

Ключевым моментом является использование параметра /noshadow для NUnit и использование переключателя -register для OpenCover (для запуска требуется регистрация COM, но этот переключатель выполняет временную регистрацию для учетной записи пользователя TeamCity).

Чтобы предотвратить иногда зависание OpenCover, также помогает отключить .NET 2.0 в файле nunit-console.exe.config в качестве поддерживаемой среды выполнения, как указано здесь:

  <startup useLegacyV2RuntimeActivationPolicy="true">
    <!-- Comment out the next line to force use of .NET 4.0 -->
    <!-- <supportedRuntime version="v2.0.50727" /> -->
    <supportedRuntime version="v4.0.30319" />
  </startup>
person NightOwl888    schedule 21.08.2012
comment
Я использую тесты Gallio runner и MbUnit, ответ от @Pavel у меня сработал. - person Orn Kristjansson; 22.08.2012