Невозможно запустить тест MSpec из-за того, что TeamCity неправильно строит тестовую сборку

Я пытаюсь запустить тест MSpec после сборки моего решения. Итак, мой сценарий MSBuild настроен следующим образом:

<?xml version="1.0" encoding="utf-8"?>
    <Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">  
      <Target Name="Build">
        <MSBuild Projects="../MyApplication.Web.sln" />
        <Message Text="Building solution" Importance="high" />
      </Target>

      <Target Name="TeamCity" DependsOnTargets="Build">
        <Message Text="Before executing MSpec command" Importance="high" />
        <Exec Command="mspec.exe ..\Hosts\MyApplication.Hosts.Web.Specs\bin\MyApplication.Hosts.Web.Specs.dll --teamcity" />
        <Message Text="Running MSpec" Importance="high" />  
      </Target>
    </Project>

Затем я называю TeamCity своей целью в TeamCity. Когда команда

"mspec.exe .. \ Hosts \ MyApplication.Hosts.Web.Specs \ bin \ MyApplication.Hosts.Web.Specs.dll --teamcity"

выполняется, я получаю следующую ошибку:

C: \ TeamCity \ buildAgent \ work \ 117e3aa3bb76aad0 \ Build> mspec .. \ Hosts \ Application.Hos ts.Web.Specs \ bin \ Application.Hosts.Web.Specs.dll Не удалось загрузить файл или сборку 'file: // / C: \ TeamCity \ buildAgent \ work \ 117e3aa3bb7 6aad0 \ Hosts \ Application.Hosts.Web.Specs \ bin \ Application.Hosts.Web.Specs.dll 'или его зависимости. Была сделана попытка загрузить программу с неверным форматом.

Проведя небольшое расследование, я обнаружил, что «MyApplication.Hosts.Web.Specs.dll» на моем локальном компьютере и на сервере сборки, хотя оба 15 КБ, имеют разные контрольные суммы md5. Это может объяснить, почему выполнение теста MSpec вызывает ошибки. Фактически, если я скопирую dll со своего локального компьютера на сервер сборки, тест будет запущен.

Итак, мой вопрос: сталкивался ли кто-нибудь еще с этой же проблемой сборки сборок, которые собираются «плохо»?

-EDIT- Локально я создаю решение как 64-битное приложение, но в TeamCity я создаю его как 32-битное (x86). Может ли это быть проблема?

PS: Я попытался создать его как 64-битное приложение в TeamCity, но у меня появились другие ошибки, которые я предпочел бы пока игнорировать. Однако для полноты картины вот оно:

Client\ProdMaster.SLCharts\ProdMaster.SLCharts.csproj
[15:11:22]: [Client\ProdMaster.SLCharts\ProdMaster.SLCharts.csproj] GetFrameworkPaths
[15:11:22]: [GetFrameworkPaths] ValidateSilverlightFrameworkPaths
[15:11:22]: [ValidateSilverlightFrameworkPaths] C:\Program Files (x86)\MSBuild\Microsoft\Silverlight\v4.0\Microsoft.Silverlight.Common.targets(104, 9): The Silverlight 4 SDK is not installed.

person DavidS    schedule 07.04.2011    source источник
comment
Есть ли шанс, что вы могли бы опубликовать точное сообщение об ошибке?   -  person Sergi Papaseit    schedule 07.04.2011
comment
@Sergi - Спасибо за помощь! Я отредактировал OP и включил подробности сообщения об ошибке.   -  person DavidS    schedule 07.04.2011
comment
@Sergi - Александр дал мне ответ. Это было довольно утомительно, но в конце концов все же удалось :)   -  person DavidS    schedule 08.04.2011
comment
Рад слышать, что вы медленно, но верно избавляетесь от всех своих проблем с MSpec / TeamCity :)   -  person Sergi Papaseit    schedule 08.04.2011
comment
@Sergi - Да, медленно - правильное слово. :). Я уверен, что будут и другие проблемы, но надеюсь, что нет.   -  person DavidS    schedule 08.04.2011


Ответы (1)


Дэйвид,

  • Какую версию MSpec вы используете? Если вы все еще используете версию 0.3.0.0, я рекомендую вам перейти на последняя сборка 0.4.9.0. Эта сборка содержит mspec.exe (AnyCPU), а также mspec-x86.exe (x86). Вы должны использовать исполняемый файл, соответствующий вашей среде / архитектуре сборки.

  • Не могли бы вы отследить привязку сборки с помощью Fution Log Viewer - это часть Windows SDK. Сообщение об ошибке «Была предпринята попытка загрузить программу с неправильным форматом». указывает, что MSpec может найти спецификацию DLL, но целевые архитектуры не совпадают между исполняемым файлом MSpec и сборкой спецификации.

person Alexander Groß    schedule 07.04.2011
comment
Большое спасибо за это! У меня действительно есть более старая версия, и я обновлю ее и дам вам знать, в чем заключается сделка. - person DavidS; 08.04.2011
comment
Я обновился до последней сборки, то есть 0.4.9.0. Я использую mspec.exe (AnyCPU). Однако я по-прежнему получаю ту же ошибку. Итак, я попробовал использовать Fusion Log Viewer и все записываю. Однако в списке есть Application.Hosts.Web.dll, но Application.Hosts.Web.Specs в списке не отображается. Имейте в виду, что я впервые использую Fusion Log Viewer, но считаю, что делаю это правильно, потому что, когда я запускаю тест локально, я вижу Application.Host.Web.Spec в списке. - person DavidS; 08.04.2011
comment
Я только что просмотрел журналы в Teamcity, и на этот раз сообщение об ошибке немного другое: эта сборка создана средой выполнения более новой, чем текущая загруженная среда выполнения, и не может быть загружена. Я попробую придумать, как это исправить. TBC - person DavidS; 08.04.2011
comment
Я наконец-то понял, как это сделать. Итак, я получил последнюю сборку. Затем я использовал mspec-clr4.exe, поскольку все мое решение построено на этом и на архитектуре x64. - person DavidS; 08.04.2011