2010-04-27 13 views
9

He migrado una solución VS2008 ASP.NET MVC a VS2010/MVC2/.NET 4.0 La solución se crea localmente y se superan todas las pruebas unitarias.Error de compilación - Solución VS2010 en TFS2008

Nuestro servidor TFS sigue siendo TFS2008 y tengo problemas para que pase la construcción de CI.

Todos los proyectos se compilan correctamente, la unidad prueba todos los que se ejecutan y pasan, pero falla el elemento Pruebas en ejecución.

Seguí this blog post para saber cómo hacer que la construcción funcione y ya casi estoy allí.

Peinar el archivo de registro de fallos que han encontrado los siguientes:

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. 

Parece que está tratando de utilizar la herramienta MSTest 2008 a pesar de que he especificado ToolsVersion = "4.0" en el TFSBuild.proj y cambió MSBuildPath en TfsBuildService.exe.config en el servidor de compilación.

¿Alguien puede indicarme la dirección correcta para que esto se consiga con éxito?

Muchas gracias, Nick

EDIT: Adición de archivos 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> 

Respuesta

1

creo que es necesario tener la versión correcta de MSTest instalado en el servidor de CI para que esto funcione.

Si ya tiene la versión correcta de MSTest asegurarse de que su proyecto de prueba hace referencia a v10.0.0.0 Microsoft.VisualStudio.QualityTools.UnitTestFramework

Para determinar la ruta MSTest, tarea TestToolsTask:

  • comprueba la versión del conjunto de Microsoft.VisualStudio.QualityTools.UnitTestFrameworkreferencia el proyecto de prueba
  • Obtén la InstallDir de Estudio Visual ma tching la versión mirando en el registro en HKEY_LOCAL_MACHINE \ Software \ Microsoft \ VisualStudio \ $ (VERSION) .0. Si no existe la clave que tomará el camino para la versión predeterminada (9.0 para tfs2008)

Así que si su prueba de referencias del proyecto de versión 10 y si Visual Studio 2010 está instalado, MSTest debería ser llamado de forma automática.


Si tiene instalado TeamBuild versión 3 (Archivo C: \ Archivos de programa \ MSBuild \ Microsoft \ VisualStudio \ TeamBuild \ Microsoft.TeamFoundation.Build.targets tienen la propiedad TeamBuildVersion conjunto a 3) se podría anular la propiedad MSBuild TestToolsTaskToolPath de la tarea TestToolsTask a la nueva versión de MSTest.

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

También es necesario comprobar que la propiedad ProjectFileVersion , en su tfsbuild.proj es mayor que 2.

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

tengo VS2008 y VS2010 instalado en el servidor de compilación. ¿Dónde puedo especificar qué versión de MSTest usar? – Nick

+0

Intente anular la propiedad TestToolsTaskToolPath en su archivo tfsbuild.proj con la ruta a la nueva versión de MSTest. –

+0

Bien, ¿dónde se agrega esto al archivo proj? La mayoría de los éxitos de Google parecen ser en chino :(He actualizado mi pregunta con el contenido de mi archivo tfsbuild.proj ... muchas gracias por su ayuda hasta ahora. – Nick

2

Tienes que abrir el archivo de configuración en "C: \ Archivos de programa (x86) \ MSBuild \ Microsoft \ VisualStudio \ TeamBuild \ Microsoft.TeamFoundation.Build.targets",

retirar los 2 siguientes entradas:

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

y

<UsingTaskTaskName="TestToolsTask"... 

y añadir la siguiente entrada (que sustituirá a las entradas anteriores y la fuerza para utilizar 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' /> 

Esto ha funcionado para mí

Saludos

+0

La entrada debe leer: isNaN1247

+0

Esto parece indicar el error, pero ¿hay una forma mejor de arreglar esto? Parece un poco extremo. – paulio

Cuestiones relacionadas