VS2019预构建和后构建事件总是失败,错误代码为1。

4

我有一个解决方案,只是使用echo Hello的构建后事件,但它总是会失败,显示The command "echo Hello!" exited with code 1.

有人知道可能出了什么问题吗?

更多信息:

  • 我们拥有一个大约有15名开发人员的团队。它总是仅针对其中的3个人失败。
  • 我们都使用Windows 10VS2019
  • 我们尝试了不同的脚本,最终使用了echo Hello
  • 我们已经尝试了生产解决方案以及空解决方案

完整错误消息:

C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\MSBuild\Current\Bin\
Microsoft.Common.CurrentVersion.targets(1328,5): 
error MSB3073: The command "echo Hello!" exited with code 1.

编辑

我已经比较了一个有工作事件的开发人员和一个没有工作事件的开发人员的Microsoft.Common.targets文件。它们的内容相同。


我偶尔遇到过这个问题,但仍然不知道是什么原因导致的!然而,一种有效的“解决方法”(至少大部分时间都有效)就是在“Post Build”(或其他名称)命令列表中添加第二行带有类似“rem foo”的内容(似乎是 rem 起作用 - 它后面的内容无关紧要)。 - Adrian Mole
嘿,谢谢@AdrianMole,这个技巧对我不起作用。 - Miroslav Mikus
2个回答

1

问题出在用户名上。我们公司有一些自由职业者,他们的用户名以某些特殊字符开头。我记不清是哪个字符了,但我猜是下划线。因此,当管理员按用户名对用户进行排序时,他们会排在前面。

更改用户名解决了我们所有情况下的问题 -_-


1
我没有Visual Studio在手边测试,但问题感觉像是ERRORLEVEL可能有时(随机?)在进入后构建脚本时为非零值。
问题在于ECHO不会影响ERRORLEVEL
dir FileThatDoesNotExist                 Gives "File not found".
echo %ERRORLEVEL%                        Prints "1" ... an error.
echo Hello                               Prints "Hello".
echo %ERRORLEVEL%                        Still prints "1".

因此,如果错误级别非零,则不会被ECHO命令重置(据我所知,REM也不影响它)。可能有其他方法来做到这一点,但是DIR . > nul似乎对我在将ERRORLEVEL重置为零方面有效(在当前目录上始终可以运行DIR!)。重定向应该可以阻止输出出现在构建日志中。
显然,如果在后期构建脚本中有早期的命令失败了,您可能不想忽略它。但是,您看到的模式(一些用户失败,一些工作)表明,由于空脚本或仅包含ECHO命令,Visual Studio有时会以非零错误级别启动后期构建脚本,这将成为后期构建阶段的“结果”和您正在看到的问题。
在脚本顶部添加DIR . > nul应确保重置退出代码(并且将允许稍后在脚本中发生的真正故障被检测到)。

谢谢,我已经尝试过 rem foo <newLine> DIR . > nul <newLine> echo Hello <newLine> rem foo。**这里** 是构建结果,作为秘密要点。提前感谢您的帮助 :) - Miroslav Mikus
也许您对这个问题感兴趣:如何最简单地将ERRORLEVEL重置为零? - aschipfl

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接