我正在尝试执行一个NAnt构建脚本,它在一个环境中完美地工作,但最近我已将构建文件迁移到新机器,在那里我面临以下问题。
使用代码:exec program="cmd" commandline="/c ${build.dir}XXX. exe "根据${构建。版本}"failonerror = " false "
name Error received外部程序失败:cmd(返回代码为1)
My Possible尝试克服这个我检查了环境变量,发现所有的都很好,并且还与旧机器进行了比较,以匹配相同。
有什么解决方案/意见吗??
似乎"cmd"正在运行,您不需要提供完整的路径。错误"外部程序失败:cmd(返回代码为1)"意味着'cmd'运行了,但它产生了一个错误。换句话说,你的VB脚本(即。"XXX.vbs")失败。尝试以下命令查找实际错误:
-
验证"${build.dir}XXX. exe"的扩展值。Vbs"是有效的文件/位置。如果你使用的是相对路径,请仔细检查你的工作目录
<echo message="${build.dir}XXX.vbs" />
或
<echo message="${file::exists(build.dir + 'XXX.vbs')}" />
-
从命令行运行NAnt脚本。这将给你一个更好的错误信息,像一个弹出错误从Windows脚本主机。
C:YourToolsNAnt.exe -buildfile:MyBuildScript.build
避免命令窗口,重定向程序的输出。在'exec'任务的命令行字符串后面附加">> exec.log",然后检查输出/日志文件的内容(即:"exec.log")。
<exec program="cmd" commandline="/c ${build.dir}XXX.vbs ${build.version} >> xxx_exec.log" failonerror="false" />
-
或者,使用'exec'任务的更好方法是使用嵌套的'arg'元素。这在你的论点中有空格的情况下会有帮助;你的脚本会读得更清楚:
<exec program="cmd" failonerror="false"> <arg value="/c" /> <arg value="${build.dir}XXX.vbs" /> <arg value="${build.version}" /> </exec>
-
最后,如果您的VB脚本由于无效参数而失败(可能是因为'${build.version}'中的空格),请使用以下内容来调试VB脚本:
WScript.echo "Argument count", wscript.arguments.count For i = 0 to wscript.arguments.count - 1 Wscript.Echo wscript.arguments.item(i) Next