У меня есть пакетный файл, который использует команду exit
для возврата кода выхода.
Этот пакетный файл в некоторых случаях может быть запущен в интерактивном режиме из командной строки, а в других случаях может быть запущен как часть проекта MSBuild с использованием задачи Exec
.
- Если я использую
exit %errorlevel%
в своем пакетном файле, это работает хорошо, и MSBuild видит код ошибки, однако интерактивный пользователь, запускающий пакетный файл из командного окна, получит грубый выход из cmd.exe в этом кейс. - Если я использую
exit /b %errorlevel%
, интерактивный сценарий не получает грубого выхода, но это также означает, чтоcmd
, запущенный моей задачейExec
, также не завершается, и поэтому MSBuild не видит возвращаемого значения.
В качестве решения обеих проблем я пытаюсь использовать exit /b
, но запускаю пакетный файл из моего скрипта сборки следующим образом:
<Exec Command="Batch.cmd params & exit %errorlevel%" />
Идея состоит в том, что я явно беру «нетерминальный» возврат из exit /b
и вручную вызываю exit
для распространения этого значения за пределы cmd.exe
, где его может видеть задача сборки Exec
.
Это кажется идеальным решением, однако оно не работает. Exec
по-прежнему не получает правильное значение ошибки.