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”错误?