【问题标题】:Build failing - VS2010 solution on TFS2008构建失败 - TFS2008 上的 VS2010 解决方案
【发布时间】:2010-04-27 09:31:07
【问题描述】:

我已将 VS2008 ASP.NET MVC 解决方案迁移到 VS2010/MVC2/.NET 4.0 该解决方案在本地构建,所有单元测试均通过。

我们的 TFS 服务器仍然是 TFS2008,我无法通过 CI 构建。

项目全部构建成功,单元测试全部运行并通过,但运行测试项失败。

我关注了this blog post,了解如何让构建工作,我快到了。

梳理失败日志文件发现如下:

Test Run Completed.
Passed  1101
------------
Total   1101   
Results file:  C:\Documents and Settings\apptemetrybuild\Local Settings\Temp\Client Portal 3\CI\TestResults\apptemetrybuild_ATT15DEV01 2010-04-27 09_09_59_Any CPU_Release.trx
Test Settings: Default Test Settings
Waiting to publish...   
Publishing results of test run apptemetrybuild@ATT15DEV01 2010-04-27 09:09:59_Any CPU_Release to http://att15tfs01:8080/...
.....Publish completed successfully.   
Command:
D:\Program Files\Microsoft Visual Studio 9.0\Common7\IDE\MSTest.exe /nologo /searchpathroot:"C:\Documents and Settings\apptemetrybuild\Local Settings\Temp\Client Portal 3\CI\Binaries\Release" /resultsfileroot:"C:\Documents and Settings\apptemetrybuild\Local Settings\Temp\Client Portal 3\CI\TestResults" /testcontainer:"C:\Documents and Settings\apptemetrybuild\Local Settings\Temp\Client Portal 3\CI\Binaries\Release\\Attenda.Stargate.Security.Tests.dll" /publish:"http://att15tfs01:8080/" /publishbuild:"vstfs:///Build/Build/149" /teamproject:"Client Portal 3" /platform:"Any CPU" /flavor:"Release"
The "TestToolsTask" task is using "MSTest.exe" from "D:\Program Files\Microsoft Visual Studio 9.0\Common7\IDE\MSTest.exe".   
Loading C:\Documents and Settings\apptemetrybuild\Local Settings\Temp\Client Portal 3\CI\Binaries\Release\\Attenda.Stargate.Security.Tests.dll... 
C:\Documents and Settings\apptemetrybuild\Local Settings\Temp\Client Portal 3\CI\Binaries\Release\\Attenda.Stargate.Security.Tests.dll 
Could not load file or assembly 'file:///C:\Documents and Settings\apptemetrybuild\Local Settings\Temp\Client Portal 3\CI\Binaries\Release\Attenda.Stargate.Security.Tests.dll' or one of its dependencies. This assembly is built by a runtime newer than the currently loaded runtime and cannot be loaded. MSBUILD : warning MSB6006: "MSTest.exe" exited with code 1. [C:\Documents and Settings\apptemetrybuild\Local Settings\Temp\Client Portal 3\CI\BuildType\TFSBuild.proj]   
The previous error was converted to a warning because the task was called with ContinueOnError=true.   
Build continuing because "ContinueOnError" on the task "TestToolsTask" is set to "true". 
Done executing task "TestToolsTask" -- FAILED.

尽管我在 tfsbuild.proj 中指定了 ToolsVersion="4.0" 并更改了构建服务器上 TfsBuildService.exe.config 中的 MSBuildPath,但它似乎正在尝试使用 2008 MSTest 工具。

谁能指出正确的方向来成功构建它?

非常感谢, 尼克

编辑:添加 tfsbuild.proj 文件

<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="DesktopBuild" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="4.0">
  <!-- Do not edit this -->
  <Import Project="$(MSBuildExtensionsPath)\Microsoft\VisualStudio\TeamBuild\Microsoft.TeamFoundation.Build.targets" />
  <ProjectExtensions>
    <!-- Team Foundation Build Version - DO NOT CHANGE -->
    <ProjectFileVersion>3</ProjectFileVersion>
    <Description></Description>
    <BuildMachine>ATT15DEV01</BuildMachine>
  </ProjectExtensions>

  <PropertyGroup>
    <TeamProject>Client Portal 3</TeamProject>
    <BuildDirectoryPath>C:\Documents and Settings\nfoster\Local Settings\Temp\Client Portal 3\CI</BuildDirectoryPath>
    <DropLocation>\\att15dev01\Builds\Client Portal 3</DropLocation>
    <RunTest>true</RunTest>
    <RunCodeAnalysis>Never</RunCodeAnalysis>
    <WorkItemType>Bug</WorkItemType>
    <WorkItemFieldValues>System.Description=Start the build using Team Build</WorkItemFieldValues>
    <WorkItemTitle>Build failure in build:</WorkItemTitle>
    <DescriptionText>This work item was created by Team Build on a build failure.</DescriptionText>
    <BuildlogText>The build log file is at:</BuildlogText>
    <ErrorWarningLogText>The errors/warnings log file is at:</ErrorWarningLogText>
    <UpdateAssociatedWorkItems>true</UpdateAssociatedWorkItems>
    <AdditionalVCOverrides></AdditionalVCOverrides>
    <CustomPropertiesForClean></CustomPropertiesForClean>
    <CustomPropertiesForBuild></CustomPropertiesForBuild>
  </PropertyGroup>

  <ItemGroup>
    <!--  SOLUTIONS  -->
    <SolutionToBuild Include="$(BuildProjectFolderPath)/../../Trunk/Client Portal 3 CI Build.sln">
        <Targets></Targets>
        <Properties></Properties>
    </SolutionToBuild>
  </ItemGroup>

  <ItemGroup>
    <!--  CONFIGURATIONS  -->
    <ConfigurationToBuild Include="Release|Any CPU">
        <FlavorToBuild>Release</FlavorToBuild>
        <PlatformToBuild>Any CPU</PlatformToBuild>
    </ConfigurationToBuild>
  </ItemGroup>

  <ItemGroup>
    <!--  TEST ARGUMENTS  -->
    <TestContainer Include="$(OutDir)\%2aTests.dll" />
  </ItemGroup>

  <PropertyGroup>
    <!-- TEST ARGUMENTS  -->
    <TestToolsTaskToolPath>C:\Program Files\Microsoft Visual Studio 10.0\Common7\IDE\MSTest.exe</TestToolsTaskToolPath>
  </PropertyGroup>

  <ItemGroup>
    <!--  ADDITIONAL REFERENCE PATH  -->
  </ItemGroup>

  <Target Name="AfterTest">
    <GetBuildProperties TeamFoundationServerUrl="$(TeamFoundationServerUrl)"
                        BuildUri="$(BuildUri)"
                        Condition=" '$(IsDesktopBuild)' != 'true' ">
      <Output TaskParameter="TestSuccess" PropertyName="TestSuccess"/>
    </GetBuildProperties>
    <SetBuildProperties TeamFoundationServerUrl="$(TeamFoundationServerUrl)"
                        BuildUri="$(BuildUri)"
                        CompilationStatus="Failed"
                        Condition=" '$(IsDesktopBuild)' != 'true' and '$(TestSuccess)' != 'true' ">
    </SetBuildProperties>
  </Target>

</Project>

【问题讨论】:

    标签: visual-studio-2010 msbuild mstest


    【解决方案1】:

    您必须在“C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\TeamBuild\Microsoft.TeamFoundation.Build.targets”中打开配置文件,

    删除以下 2 个条目:

    <UsingTask TaskName="Microsoft.TeamFoundation.Build.Tasks.TestToolsTask"...
    

    <UsingTaskTaskName="TestToolsTask"...
    

    并添加以下条目(它将替换以前的条目并强制使用 MSTest v10.0):

    <UsingTaskTaskName="Microsoft.TeamFoundation.Build.Tasks.TestToolsTask"
           AssemblyFile="C:\Program Files\Microsoft Visual Studio 10.0\Common7\IDE\PrivateAssemblies\Microsoft.TeamFoundation.Build.ProcessComponents.dll"
            Condition=" '$(ProjectFileVersion)' == '2' />
    

    这对我有用

    干杯

    【讨论】:

    • 固定条目应为:
    • 这似乎是错误,但有没有更好的方法来解决这个问题?这似乎有点极端。
    【解决方案2】:

    我认为您需要在 CI 服务器上安装正确版本的 MSTest 才能正常工作。

    如果您已经拥有正确版本的 MSTest,请确保您的测试项目引用 Microsoft.VisualStudio.QualityTools.UnitTestFramework v10.0.0.0

    确定MSTest路径,TestToolsTask任务:

    • 检查测试项目引用的程序集Microsoft.VisualStudio.QualityTools.UnitTestFramework的版本
    • 通过查看 HKEY_LOCAL_MACHINE\Software\Microsoft\VisualStudio\$(VERSION).0 中的寄存器,获取与版本匹配的 Visual Studio 的 InstallDir。如果密钥不存在,它将采用默认版本的路径(tfs2008 为 9.0)

    因此,如果您的测试项目引用版本 10 并且安装了 Visual Studio 2010,则应该自动调用 MSTest。


    如果您安装了 TeamBuild 版本 3(文件 C:\Program Files\MSBuild\Microsoft\VisualStudio\TeamBuild\Microsoft.TeamFoundation.Build.targets 具有属性 TeamBuildVersion 设置为 3) 您可以将任务 TestToolsTask 的 MSBuild 属性 TestToolsTaskToolPath 覆盖为新版本的 MSTest。

    <PropertyGroup>
      <TestToolsTaskToolPath>C:\Program Files\Microsoft Visual Studio 10.0\Common7\IDE\MSTest.exe</TestToolsTaskToolPath>
    </PropertyGroup>
    

    您还需要检查 tfsbuild.proj 中的属性 ProjectFileVersion 是否大于 2。

    <ProjectExtensions>
      ...
      <ProjectFileVersion>3</ProjectFileVersion>
      ...
    </ProjectExtensions>
    

    【讨论】:

    • 我在构建服务器上安装了 VS2008 和 VS2010。在哪里可以指定要使用的 MSTest 版本?
    • 尝试使用新版本 MSTest 的路径覆盖 tfsbuild.proj 文件中的属性 TestToolsTaskToolPath。
    • 好的,这在哪里添加到 proj 文件中?大多数谷歌点击似乎都是中文的:(我已经用我的 tfsbuild.proj 文件内容更新了我的问题......非常感谢你到目前为止的帮助。
    • 只需在 tfsbuild.proj 文件的任何位置添加我在答案中定义的 PropertyGroup。 (msdn.microsoft.com/en-us/library/aa337598%28v=VS.80%29.aspx)
    • 好的,我已将上面的 sn-p 添加到我的 tfsbuild.proj 文件中,但构建仍然失败并出现同样的问题。我尝试将 元素添加到 proj 文件中的测试参数 PropertyGroup 中,但没有成功。
    猜你喜欢
    • 1970-01-01
    • 2011-12-24
    • 2018-04-28
    • 1970-01-01
    • 2011-05-08
    • 2016-03-02
    • 2019-01-02
    • 2021-01-17
    • 1970-01-01
    相关资源
    最近更新 更多