MSVC2013:如何避免使用错误的预构建脚本中止构建过程(错误 MSB3073: :VCEnd" 退出,代码 -1)

Posted

技术标签:

【中文标题】MSVC2013:如何避免使用错误的预构建脚本中止构建过程(错误 MSB3073: :VCEnd" 退出,代码 -1)【英文标题】:MSVC2013: How to avoid aborting build process with Pre-build script in error (error MSB3073: :VCEnd" exited with code -1) 【发布时间】:2019-04-11 08:12:32 【问题描述】:

我在 MSVC13 中设置了一个预构建事件,该事件以 error MSB3073: :VCEnd" exited with code -1. 退出 而且我无法绕过这个错误,我不希望构建过程停止,即使 bat 文件退出错误。

我已经配置了

BuildEvents > 预构建事件

调用 bat 文件 命令行:

调用 $(ProjectDir)\pre_build.bat $(Configuration)=1

此 bat 文件包含对其他 bat 文件的 2 次调用。第一个错误退出(但我不在乎,因为我想要它做的子任务已经完成),第二个没问题。

在 pre-build.bat 中,我尝试拦截此错误并更新值以说明 MSVC 一切正常,但我无法成功。 我试图回显 ERRORLEVEL 但它包含 0。 我尝试将 ERRORLEVEL 设置为 0,但在 MSVC 级别没有改变任何内容。 我尝试在我的 bat 文件末尾添加 exit 0、exit /b 0 或 @exit 0,但没有改变。

我发现此链接 (https://blogs.msdn.microsoft.com/astebner/2006/08/08/how-to-make-visual-studio-2005-ignore-return-codes-from-pre-build-events/) 解释了如何告诉 MSVC 忽略错误,但它不起作用,因为它是为 MSVC2005 编写的,并且 vcxproj 中 PreBuildEvent 的语法已更改。

如果我在控制台中运行我的脚本,它会退出并出现错误,但如前所述,我不在乎这个错误,部分工作已经完成。

我也尝试以管理员身份运行 MSVC,没有变化。

我的 pre-build.bat 的内容:

调用 build.bat %* TOOLCHAIN=mdk4cc5 TC_NO_CHECK=1

build.bat 运行 SCons(我对 SCons 没有任何了解)

如果您知道如何在 MSVC 中忽略此错误以继续构建过程(无论它是否干净),这将非常有帮助,因为我已经花了一天的时间...

非常感谢您的反馈和回答。

【问题讨论】:

您是否正在使用call 函数,因为您特别需要第二个批处理? 能改一下bat脚本吗?所以你可以确保它返回 0。 我的第一次尝试没有调用。我添加了调用,因为它在 MSVC 在线文档中明确说明。我也试过不打电话但还是一样,我无法捕捉到错误 我想知道切换参数的顺序是否会有所帮助。出于某种原因,我觉得如果您交换 %* 和选项,它应该可以工作;你试过吗? @@Simon,在调用 scons 的 build.bat 中,我尝试添加一个 exit 0 exit /b 0 @exit 0,但没有改变。如果我在执行错误的 scons 后“回显错误代码为 %ERRORLEVEL%”,我得到此错误代码为 0。 【参考方案1】:

您的命令输出可能在某处包含单词“Error”。

我们这里有一些脚本可以做到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 ==========

静默命令输出后,构建成功。

【讨论】:

【参考方案2】:

我不是真正的 C++ 专家,但也许这篇文章可以帮助您: Disable single warning error

答案中有人谈到了 Pragma Surprass,因此您可以尝试一下:

#pragma warning(suppress: 4101)

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

【讨论】:

感谢您的回复,但问题不在于源代码,而在于 MSVC 的预构建执行。该编译指示在 C 中运行良好,但我们必须注意仅在部分/方法上使用它,而不是在完整文件或项目中使用它 好的,很抱歉,我真的帮不上忙。我只是认为警告超越可能会有所帮助,因为这仅在我理解的一行中指定。

以上是关于MSVC2013:如何避免使用错误的预构建脚本中止构建过程(错误 MSB3073: :VCEnd" 退出,代码 -1)的主要内容,如果未能解决你的问题,请参考以下文章

在 MSYS 环境中使用 MSVC 工具链(例如:CL.EXE)时,如何避免“未解析的外部符号 _mainCRTStartup”错误?

如何将我的静态 Qt 构建与 Creator 一起使用?

从批处理脚本中引发 Jenkins 作业中止

NSIS 中止和错误级别

由于 64 位目标,facebook ios sdk 3.8 的构建中止

基于环境变量更新 config.json 的预构建脚本