MSVC2013: Как избежать прерывания процесса сборки из-за ошибки сценария предварительной сборки (ошибка MSB3073:: VCEnd "завершилась с кодом -1)

Я установил событие предварительной сборки в MSVC13, которое завершается с error MSB3073: :VCEnd" exited with code -1.. И я не могу обойти эту ошибку, я не хочу, чтобы процесс сборки останавливался, даже если файл bat завершился с ошибкой.

Я настроил

BuildEvents> Событие перед сборкой

с вызовом командной строки bat-файла:

вызовите $ (ProjectDir) \ pre_build.bat $ (Configuration) = 1

Этот файл bat содержит 2 обращения к другим файлам bat. Первый выход с ошибкой (но меня не волнует, что подзадача, которую я хочу, выполнена), а второй - в порядке.

В pre-build.bat я попытался перехватить эту ошибку и обновить значение, чтобы сказать, что с MSVC все в порядке, но мне это не удалось. Я попытался отобразить ERRORLEVEL, но он содержит 0. Я попытался установить ERRORLEVEL на 0, но ничего не меняет на уровне MSVC. Я попытался добавить exit 0, exit / b 0 или @exit 0 в конец моего файла bat, но не изменилось.

Я нашел эту ссылку (https://blogs.msdn.microsoft.com/astebner/2006/08/08/how-to-make-visual-studio-2005-ignore-return-codes-from-pre-build-events/), объясняющий, как указать MSVC игнорировать ошибки, но он не работает, поскольку он написан для MSVC2005, а синтаксис PreBuildEvent в vcxproj изменился.

Если я запустил свой скрипт в консоли, он выйдет с ошибкой, но, как было сказано ранее, меня не волнует эта ошибка, часть работы выполнена.

Я также пытаюсь запустить MSVC от имени администратора, без изменений.

Содержимое моего pre-build.bat:

вызовите build.bat% * TOOLCHAIN ​​= mdk4cc5 TC_NO_CHECK = 1

и build.bat запускает SCons (у меня нет никаких знаний о SCons)

Если у вас есть идея, как игнорировать эту ошибку в MSVC, чтобы продолжить процесс сборки (независимо от того, чистая она или нет), это будет очень полезно, поскольку я уже потратил на это день ...

Большое спасибо за ваши отзывы и ответы.


person JCV    schedule 11.04.2019    source источник
comment
Вы используете функцию call, потому что вам особенно нужен второй пакетный процесс?   -  person Jose Fernando Lopez Fernandez    schedule 11.04.2019
comment
Можете ли вы изменить скрипт летучей мыши? Таким образом, вы можете убедиться, что он вернет 0.   -  person Simon    schedule 11.04.2019
comment
Мои первые попытки были без звонка. Я добавляю звонок, как это явно указано в онлайн-документах MSVC. Я тоже пробовал без звонка, но все так же, я не могу уловить ошибку   -  person JCV    schedule 11.04.2019
comment
Интересно, поможет ли изменение порядка аргументов. По какой-то причине мне кажется, что если вы поменяете местами% * и параметры, это должно сработать; ты пробовал это?   -  person Jose Fernando Lopez Fernandez    schedule 11.04.2019
comment
@@ Simon, в вызывающем scons build.bat я пытался добавить exit 0 exit / b 0 @exit 0, но не меняет. если я отображаю код ошибки% ERRORLEVEL% после выполнения scons, которое является ошибочным, я получил этот код ошибки 0.   -  person JCV    schedule 11.04.2019
comment
@JoseFernandoLopezFernandez, индекс ошибочен, я знаю и просто хочу не игнорировать эту ошибку. Порядок параметров не влияет на результат.   -  person JCV    schedule 11.04.2019
comment
Вы смотрели этот вопрос ? Интересно, может быть проблема с порядком сборки вашего проекта (ов)? В этом вопросе проблема заключалась в зависимости проекта, которая была настроена на компиляцию после основного проекта, что привело к ошибке MSB3073. Тогда будет понятно, почему сборка вашего решения завершается немедленно, а не продолжает то, что она может.   -  person Jose Fernando Lopez Fernandez    schedule 11.04.2019
comment
@JoseFernandoLopezFernandez, порядок в порядке, так как я нахожусь в предварительной сборке, а не после сборки. Работа, которую мне нужен мой prebuilt.bat, выполнена правильно. Я ожидаю ошибки от моего скрипта, но хочу ее поймать и попросить MSVC продолжить. В .vcxproj я пытаюсь обновить раздел PreBuildEvent, установив для некоторых ContinueOnError или IgnoreErroCode значение true, но не меняется и сборка останавливается .... Я застрял   -  person JCV    schedule 11.04.2019
comment
привет всем, после того, как задали вопрос в MSDN (social.msdn.microsoft.com/Forums/vstudio/en-US/), Microsoft предлагает это решение, которое отлично работает: ‹Project› ... ‹Target Name = MyCustomPreBuildEvent BeforeTargets = PreBuildEvent› ‹Exec Command = call $ (ProjectDir) \ pre_build.bat $ (Configuration) = 1 ContinueOnError = true / ›‹/Target› ‹/Project›   -  person JCV    schedule 12.04.2019


Ответы (2)


Вывод вашей команды может где-то содержать слово «Ошибка».

У нас был скрипт, который echo XX send-msg 19 82 Error :A KANAL A AUSGEFALLEN Error ge

Затем вывод сборки содержал:

2> ------ Erstellen gestartet: Projekt: DecoderTest, Konfiguration: Debug Any CPU ------
2>  Datei nicht gefunden
2>EXEC : XX   send-msg 19 82 error : A   KANAL A AUSGEFALLEN   Error   ge
2>  
2>  D:\Projekte\[...]\DecoderTest\\..\..\..\TableConverterTraverse.bat: Durchlauf erfolgreich.
2>C:\Program Files (x86)\Microsoft Visual Studio\[...]: error MSB3073: Der Befehl "D:\Projekte\[...]\DecoderTest\InvokeTableConverter.bat
2>C:\Program Files (x86)\Microsoft Visual Studio\[...]: error MSB3073: " wurde mit dem Code -1 beendet.
========== Erstellen: 1 erfolgreich, 1 fehlerhaft, 39 aktuell, 0 übersprungen ==========

После отключения вывода команды сборка завершилась успешно.

person jifb    schedule 19.06.2020

Я не настоящий эксперт по C ++, но, возможно, этот пост может вам помочь: Отключить одиночную ошибку предупреждения

Кто-то в ответах говорил о Pragma Surprass, чтобы вы могли попробовать это:

#pragma warning(suppress: 4101)

// here goes your single line of code where the warning occurs

person Assasin Bot    schedule 11.04.2019
comment
Спасибо за ответ, но проблема не в исходном коде, а в выполнении MSVC перед сборкой. Прагма хорошо работает в C, но мы должны обращать внимание на то, чтобы использовать ее только в разделах / методах, а не для полного файла или проекта. - person JCV; 11.04.2019
comment
Хорошо, тогда мне жаль, что я действительно не мог помочь. Я просто подумал, что предупреждение Surprass может помочь, поскольку это указано только в одной строке, как я понял. - person Assasin Bot; 11.04.2019