2010-04-27 116 views
9

我已经将VS2008 ASP.NET MVC解决方案迁移到VS2010/MVC2/.NET 4.0该解决方案在本地构建并通过所有单元测试。构建失败 - 在TFS2008上的VS2010解决方案

我们的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 [email protected] 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. 

它看起来像它的尝试使用,即使我已经指定了2008年的MSTest工具ToolsVersion =“4.0”,在tfsbuild.proj和更改生成服务器上的TfsBuildService.exe.config中的MSBuildPath。

任何人都可以指出我朝着正确的方向来成功构建?

非常感谢, 尼克

编辑:添加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> 

回答

1

我认为你需要有你的CI服务器上安装了这个工作MSTest的正确版本。

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

要确定MSTest的路径,TestToolsTask任务:

  • 检查装配Microsoft.VisualStudio.QualityTools.UnitTestFramework通过测试项目
  • 引用的版本获取的Visual Studio MA的安装目录通过在HKEY_LOCAL_MACHINE \ Software \ Microsoft \ VisualStudio \ $(VERSION).0中查找寄存器来查找版本。如果该键不存在,将采取默认版本的路径(9.0 tfs2008)

所以,如果你的测试项目引用版本10,如果安装了Visual Studio 2010中,MSTest的应该被自动调用。


如果你有TeamBuild 3版安装(文件C:\ Program Files文件\的MSBuild \微软\ VisualStudio的\ TeamBuild \ Microsoft.TeamFoundation.Build.targets具备的使用性能TeamBuildVersion盘以3)你可以覆盖MSBuild属性TestToolsTaskToolPath的任务TestToolsTask到新版本的MSTest。

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

你还需要检查属性ProjectFileVersion,在你tfsbuild。凸出大于2

<ProjectExtensions> 
    ... 
    <ProjectFileVersion>3</ProjectFileVersion> 
    ... 
</ProjectExtensions> 
+0

我有VS2008和安装VS2010构建服务器。我在哪里可以指定要使用哪个版本的MSTest? – Nick 2010-04-27 12:27:26

+0

尝试使用新版本MSTest的路径覆盖tfsbuild.proj文件中的属性TestToolsTaskToolPath。 – 2010-04-27 13:01:45

+0

好的,这是哪里得到添加到proj文件?大多数谷歌点击这似乎是在中文:(我更新我的问题,我的tfsbuild.proj文件内容...非常感谢您的帮助,迄今。 – Nick 2010-04-27 13:44:30

2

已在 “C:\ Program Files文件(x86)的\的MSBuild \微软\ 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' /> 

这很适合我

干杯

+0

固定行应改为: isNaN1247 2010-12-17 15:34:22

+0

这似乎是错误,但有没有更好的方法来解决这个问题?这似乎有点极端。 – paulio 2011-08-08 15:35:38

相关问题