【问题标题】:Unable to run MSpec test due to the fact that TeamCity is building test assembly wrong由于 TeamCity 构建测试程序集错误,无法运行 MSpec 测试
【发布时间】:2011-04-07 08:21:33
【问题描述】:

我正在尝试在构建解决方案之后运行 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' 或 on e 的依赖项。试图用不正确的 f 加载程序 格式。

经过一番调查,我发现本地机器和构建服务器上的“MyApplication.Hosts.Web.Specs.dll”虽然都是 15kb,但具有不同的 md5 校验和。这或许可以解释为什么执行 MSpec 测试会导致错误。事实上,如果我将 dll 从本地机器复制到构建服务器,测试就会运行。

所以我的问题是,其他人是否遇到过同样的问题,即“糟糕”地构建程序集?

-编辑- 在本地,我将解决方案构建为 64 位应用程序,但在 TeamCity 中,我将其构建为 32 位 (x86)。会不会是这个问题?

PS:我尝试在 TeamCity 中将其构建为 64 位应用程序,但我遇到了其他我宁愿暂时忽略的错误。但是,为了完整起见,这里是:

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.

【问题讨论】:

  • 您有机会发布确切的错误信息吗?
  • @Sergi - 感谢您的帮助!我已经编辑了 OP 并包含了错误消息的详细信息。
  • @Sergi - Alexander 为我提供了答案。这是一个相当艰难的过程,但最终到达了那里:)
  • 很高兴听到您正在缓慢但肯定地摆脱所有 MSpec/TeamCity 问题 :)
  • @Sergi - 是的,慢慢地是正确的词。 :)。我确信还会有其他问题,但希望不会。

标签: teamcity mspec


【解决方案1】:

大卫,

  • 你是哪个版本的 MSpec 跑步?如果你还在 0.3.0.0 我 鼓励您切换到most recent 0.4.9.0 build。这个构建 还包含 mspec.exe (AnyCPU) 作为 mspec-x86.exe (x86)。你应该 使用与您的构建匹配的可执行文件 环境/架构。

  • 能否请您跟踪程序集 与 Fusion Log Viewer 绑定 - 它是 Windows SDK 的一部分。这 错误消息“已尝试 加载一个不正确的程序 格式。”表示 MSpec 能够 找到规范 DLL,但目标 架构之间不匹配 MSpec 可执行文件和规范 组装。

【讨论】:

  • 非常感谢!我确实有旧版本,我会更新它,让你知道交易是什么。
  • 我已更新到最新版本,即 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。
  • 我刚刚查看了 Teamcity 中的日志,这次错误消息略有不同:此程序集由比当前加载的运行时更新的运行时构建,无法加载。我会试着弄清楚如何解决这个问题。待定
  • 我终于想出了如何做到这一点。所以我得到了最新的版本。然后我使用了 mspec-clr4.exe,因为我的整个解决方案都是基于它和 x64 架构构建的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多