Эхо-сценарий VCEnd c ++ post build рассматривается как ошибка и убивает сборку независимо от кода возврата - PullRequest
0 голосов
/ 23 октября 2019

Если я создаю Visual Studio 2019 C ++, проект. Добавьте скрипт пост-сборки. Затем добавьте следующее в скрипт посткомпиляции

echo : no error :
set ERRORLEVEL=0

Это вызовет следующую ошибку:

1>C:\Program Files (x86)\Microsoft Visual Studio\2019\Preview\MSBuild\Microsoft\VC\v160\Microsoft.CppCommon.targets(148,5): error MSB3073: The command "echo : no error :
1>C:\Program Files (x86)\Microsoft Visual Studio\2019\Preview\MSBuild\Microsoft\VC\v160\Microsoft.CppCommon.targets(148,5): error MSB3073: set ERRORLEVEL=0
1>C:\Program Files (x86)\Microsoft Visual Studio\2019\Preview\MSBuild\Microsoft\VC\v160\Microsoft.CppCommon.targets(148,5): error MSB3073: :VCEnd" exited with code -1.
1>Done building project "project.vcxproj" -- FAILED.

Если вы измените «error» на что-либо еще или удалите: он будетПостроить без ошибок. Это похоже на какой-то хакерский код внутри msbuild, который выполняет регулярное выражение для ":. +? Error. + ?:", и если он его находит, он убивает сборку. Хуже всего то, что он также игнорирует реальный код возврата.

Наша проблема в том, что мы вызываем сторонний exe-файл, который печатает строки в нашем приложении, и один из них просто соответствует этому волшебному регулярному выражению.

Как я могу изменить вывод оболочки, чтобы заменить эту строку ": no error:" чем-то другим. Или как я могу это исправить, не скрывая вывод оболочки?

...