2010-04-27 20 views
9

Ho migrato una soluzione MVC ASP.NET VS2008 a VS2010/MVC2/.NET 4.0 La soluzione viene generata localmente e tutti i test di unità passano.Errore di compilazione - Soluzione VS2010 su TFS2008

Il nostro server TFS è ancora TFS2008 e sto riscontrando problemi nel far passare il build CI.

I progetti vengono tutti compilati correttamente, l'unità esegue il test di tutti i passaggi e passaggi ma l'elemento Test in esecuzione non riesce.

Ho seguito this blog post su come far funzionare la build e ci sono quasi.

Pettinatura il file di log per gli errori ho trovato il seguente:

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. 

Sembra che stia cercando di utilizzare lo strumento MSTest 2008 anche se ho specificato ToolsVersion = "4.0" nella TFSBuild.proj e modificato MSBuildPath in TfsBuildService.exe.config sul server di build.

Qualcuno può indicarmi la direzione giusta per farlo costruire correttamente?

Molte grazie, Nick

EDIT: Aggiunta di file 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> 

risposta

1

penso che è necessario avere la versione corretta di MSTest installato sul server CI per questo al lavoro.

Se avete già la versione giusta di MSTest assicurarsi che il progetto di test fa riferimento Microsoft.VisualStudio.QualityTools.UnitTestFramework v10.0.0.0

Per determinare il percorso MSTest, TestToolsTask compito:

  • controlli la versione del gruppo Microsoft.VisualStudio.QualityTools.UnitTestFramework a cui fa riferimento il progetto di test
  • Raccogli le InstallDir di Visual Studio ma tching la versione guardando nel registro in HKEY_LOCAL_MACHINE \ Software \ Microsoft \ VisualStudio \ $ (VERSION) .0. Se la chiave non esiste ci vorrà il percorso per la versione di default (9.0 per tfs2008)

Quindi, se il test del progetto riferimenti versione 10 e se è installato Visual Studio 2010, MSTest dovrebbe essere chiamato automaticamente.


Se hai TeamBuild versione 3 installata (File C: \ Program Files \ MSBuild \ Microsoft \ VisualStudio \ TeamBuild \ Microsoft.TeamFoundation.Build.targets hanno la proprietà TeamBuildVersion set a 3) si potrebbe sovrascrivere la proprietà MSBuild TestToolsTaskToolPath dell'attività TestToolsTask alla nuova versione di MSTest.

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

È inoltre necessario verificare che la proprietà ProjectFileVersion, nella vostra TFSBuild.proj è maggiore di 2.

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

ho VS2008 e VS2010 installato su il server di build. Dove posso specificare quale versione di MSTest usare? – Nick

+0

Provare a eseguire l'override della proprietà TestToolsTaskToolPath all'interno del file tfsbuild.proj con il percorso della nuova versione di MSTest. –

+0

Ok, dove viene aggiunto al file proj? La maggior parte degli hit di Google per questo sembra essere in cinese :(Ho aggiornato la mia domanda con il mio contenuto del file tfsbuild.proj ... molte grazie per il tuo aiuto fino ad ora. – Nick

2

Devi aprire il file di configurazione in "C: \ Program Files (x86) \ MSBuild \ Microsoft \ VisualStudio \ TeamBuild \ Microsoft.TeamFoundation.Build.targets",

rimuovere le seguenti voci: 2

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

e

<UsingTaskTaskName="TestToolsTask"... 

e aggiungere la seguente voce (che sostituirà le voci precedenti e la forza di usare 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' /> 

Questo ha funzionato per me

Acclamazioni

+0

La voce fissa dovrebbe essere: isNaN1247

+0

Questo sembra l'errore, ma c'è un modo migliore per risolvere questo? Sembra un po 'estremo. – paulio

Problemi correlati