我正在尝试执行一个NAnt构建脚本,该脚本在一个环境中完美运行,但最近我将构建文件迁移到新机器,我面临以下问题。
使用过的NAnt代码: exec program =“cmd”commandline =“/ c $ {build.dir} \ XXX.vbs $ {build.version}”failonerror =“false”
收到NAne错误 外部程序失败:cmd(返回代码为1)
我可能尝试克服这个 我检查了环境变量,发现一切都很好,并且与旧机器进行比较以匹配相同的。
任何解决方案/评论??
答案 0 :(得分:1)
似乎“cmd”正在运行,您无需提供完整路径。 “外部程序失败:cmd(返回代码为1)”错误表示'cmd'已运行,但它产生了错误。换句话说,你的VB脚本(即'XXX.vbs')失败了。请尝试以下方法查找实际错误:
验证“$ {build.dir} \ XXX.vbs”的扩展值是否为有效文件/位置。如果您正在使用相对路径,请仔细检查您的工作目录。
<echo message="${build.dir}\XXX.vbs" />
或
<echo message="${file::exists(build.dir + '\XXX.vbs')}" />
从命令行运行您的NAnt脚本。这将为您提供更好的错误消息,例如来自Windows脚本宿主的弹出错误。
C:\YourTools\NAnt.exe -buildfile:MyBuildScript.build
避开命令窗口,重定向程序的输出。将“&gt;&gt; exec.log”附加到'exec'任务中的命令行字符串,然后检查输出/日志文件的内容(即'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
希望这有帮助。