为什么 Ant Exec 任务返回代码与 ERRORLEVEL 值不匹配?

cmc*_*nty 5 java ant batch-file

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

msbuild.exe %ARGS%
echo %ERRORLEVEL%
Run Code Online (Sandbox Code Playgroud)

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

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

 BUILD FAILED
 C:\proj\build.xml:410: exec returned: 2
Run Code Online (Sandbox Code Playgroud)

%ERRORLEVEL% 怎么可能是 0,但是 Ant exec 得到的返回码是 2?如果命令不返回代码,是否设置了一些默认错误代码?Ant 文档显示:

error code 2 means 'no such program',
Run Code Online (Sandbox Code Playgroud)

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

用 Ant 代码更新

<target name="build.csharp" if="isWindowsPlatform">
    <exec executable="cmd.exe" failOnError="true">
        <arg value="/c"/>
        <arg value="build.csharp.bat" />
    </exec>
</target>
Run Code Online (Sandbox Code Playgroud)

Mar*_*nor 2

ANT手册指出:

错误和返回代码

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

如果尝试启动程序失败并出现与操作系统相关的错误代码,则<exec>停止构建,除非failifexecutionfails设置为false。您可以使用它来运行程序(如果存在),否则不执行任何操作。

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

要获取程序的返回代码,您需要使用exec taskresultProperty属性。