2017-01-24 12 views
1

У меня есть партия, которая продолжает терпеть неудачу через TFS с выходом -1.Как пакетный выход с -1 с MSBuild в потоке сборки TFS, когда нет отрицательных выходов внутри серии партий

Партия, получившая вызов, не имеет отрицательных выходов. Он вызывает вместо запуска непосредственно некоторые другие партии и инструменты командной строки, которые могут возвращать отрицательный код выхода, но они все call Е.Д., не побежал прямо, и когда я установить точку отказа, я exit /b 1 или exit 1

.... target (350): команда «call C: \ Build \ BuildTools \ callSigning.bat» вышла с кодом -1.

Демонтаж в сбое и запуск партии там не вызывает ошибки!

Что может быть вызвано этим exit -1 с MSBuild? Есть ли какие-то странные закулисные замечания, о которых я просто не знаю?

Внутри файла .proj, я получил строку:

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

И что партия не имеет отрицательных кодов выхода ...

@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 .\renew_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 
+0

Где 'passed' взялось? – aschipfl

+0

Третья строка цикла for: 'IF NOT '! Прошло!" == "true" IF "! Errorlevel!" == "0" Set pass = true && exit/b 0' –

+1

А, да! Но это не имеет смысла, поскольку вы оставляете скрипт сразу после установки переменной, поэтому отрицательное условие 'if NOT '! Прошло!" == "true" 'всегда выполняется и поэтому выполняется (если' pass' уже установлен на 'true' заранее) ... – aschipfl

ответ

2

Это, скорее всего, побочный эффект того факта, что Exec размещает ваш текст Command в файле .exec.cmd во временном каталоге и вызывает cmd.exe /C [that temporary .exec.cmd]. В результате, пути могут быть не такими, как вы думаете, и ошибки, связанные с кавычками, могут возникать. Когда я использую Exec я оставляю мало шансов пройти и явные пути, например .:

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

И в SomeFile.bat:

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

Как подлый! Я попробую это, как только смогу. –

+1

Да, это был билет! Pesky 'Exec' ... Я создал новое свойство в общей PropertyGroup в моем файле сборки, установил его в' $ (MSBuildThisFileDirectory) ', и поскольку исходная партия не приняла никаких аргументов, я отправил эту новую переменную вместо использования '% ~ dp0'. Наверное, я мог бы просто использовать '$ (MSBuildThisFileDirectory)' как аргумент в ретроспективе ... –

 Смежные вопросы

  • Нет связанных вопросов^_^