5

我有一个从 Ant exec 任务调用的批处理脚本来编译一些 CSharp 代码。批处理脚本的结构如下

msbuild.exe %ARGS%
echo %ERRORLEVEL%

现在当任务在 Ant 中运行时,我得到以下结果:

 [exec] Time Elapsed 00:00:09.48
 [exec] 0

 BUILD FAILED
 C:\proj\build.xml:410: exec returned: 2

%ERRORLEVEL% 怎么可能是 0,但 Ant 执行程序的返回码是 2?如果命令不返回代码,这是设置了一些默认错误代码吗?蚂蚁文档显示:

error code 2 means 'no such program',

但显然我的批处理文件正在正确执行。

使用 Ant 代码更新

<target name="build.csharp" if="isWindowsPlatform">
    <exec executable="cmd.exe" failOnError="true">
        <arg value="/c"/>
        <arg value="build.csharp.bat" />
    </exec>
</target>
4

3 回答 3

2

ANT 手册指出:

错误和返回码

默认情况下,a 的返回码<exec>被忽略;当您设置时,failonerror="true"任何返回代码信号失败(特定于操作系统)都会导致构建失败。或者,您可以设置resultproperty属性的名称并将其分配给结果代码(当然,除非是不变性)。

如果尝试启动程序失败并出现依赖于操作系统的错误代码,则<exec>停止构建,除非failifexecutionfails设置为false. 如果程序存在,您可以使用它来运行程序,否则什么也不做。

这些错误代码是什么意思?好吧,它们依赖于操作系统。在 Windows 机器上,您必须查看文档;错误代码 2 表示“没有这样的程序”,这通常意味着它不在路径上。每当您从任何 Ant 任务中看到这样的错误时,这通常不是 Ant 错误,而是您机器上的一些配置问题。

要获取程序的返回码,您需要使用exec 任务的resultproperty属性。

于 2013-02-20T09:04:46.920 回答
1

ANT wiki 中有一篇关于此行为的文章,包括解决方案: http ://wiki.apache.org/ant/AntOnWindows

于 2014-01-29T20:30:53.850 回答
1

我跑了一堆排列。我试过了:

  • 没有最终的退出语句,只有命令
  • exit %errorlevel%
  • exit /b %errorlevel%
  • @comspec /c exit %errorlevel%

唯一能让 ant 看到正确错误代码的技术是exit %errorlevel%. 虽然脚本现在可以正常工作,但有点烦人,因为直接从命令 shell 运行它会导致 shell 之后退出。(通过作品调用脚本cmd /c,但很麻烦。)

我很想请一位 DOS 专家来这里解释这些结果并对其进行扩展。谢谢。

于 2013-02-21T08:35:55.707 回答