windows - Hvordan kan en batch afslutte med -1 med MSBuild i en TFS-build flow, når der ikke er negative udgange inden for række af batches

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg har en batch, der fortsætter med at svigte gennem TFS med en udgang på -1.


Det parti, der bliver kaldt, har ingen negative udgange. Det kalder i stedet for at køre direkte nogle andre partier og kommandolinjeværktøjer, som kan returnere en negativ exitkode, men de er alle call ed, ikke kørt direkte, og når jeg sætter et fejlpunkt, jeg exit /b 1 eller exit 1



  .... mål (350): Kommandoen 'call
  C: \ Build \ BuildTools \ callSigning.bat 'afsluttet med kode -1.



Fjernelse i den svigtende boks og kørsel af partiet der genererer ingen fejl!


Hvad kan udløse dette exit -1 med MSBuild? Er der noget underligt bagved scenen, hvor jeg bare ikke er opmærksom på?


Inde i .proj-filen har jeg en linje som denne:


<Exec Command="call $(SrcRoot)BuildToolscallSigning.bat" ContinueOnError="false"/>


Og det parti har ingen negative exitkoder ...


@echo off
pushd \%~dp0

IF EXIST "\%~dp0signVerification.log" echo Cert renewed and successfully signed once for this TFS job already&&exit 0

IF NOT EXIST .
enew\_certificate.bat echo missing renew\_certificate.bat&&exit 1

SETLOCAL EnableDelayedExpansion EnableExtensions

FOR /L \%\%T IN (1,1,5) DO (
    call \%~dp0renew\_certificate.bat
    IF NOT "!passed!"=="true" IF "!errorlevel!"=="0" Set passed=true&&exit /b 0
    IF NOT "!passed!"=="true" echo Re-trying signing iteration \%\%T && call ping 127.0.0.1 -n 61 > nul
)

IF NOT "\%passed\%"=="true" echo Signing did not pass && exit /b 1
exit /b 0

Bedste reference


Det er sandsynligvis en bivirkning af, at Exec placerer din Command tekst i en .exec.cmd fil i en midlertidig mappe og kalder cmd.exe /C [that temporary .exec.cmd]. Som følge heraf er stier måske ikke det, du synes, og fejl, der involverer citatmærker, kan overflade. Når jeg bruger Exec, forlader jeg lidt til chance og sender eksplicit stier, f.eks .:


<PropertyGroup>
  <SomeCommand>
    "$(MSBuildThisFileDirectory)SomeFile.bat" "$(SomeToolsDir)" "$(SomeLogFilePath)"
  </SomeCommand>
</PropertyGroup>
<Exec WorkingDirectory="$(SomeToolsDir)" Command="$(SomeCommand)" />


Og i SomeFile.bat:


SET SomeToolsDir=\%~1
SET SomeLogFilePath=\%~2
SOMEPROGRAM.EXE -logfilepath "\%SomeLogFilePath\%"