NANT构建错误:Cmd

时间:2011-08-24 12:52:26

标签: build command nant

我正在尝试执行一个NAnt构建脚本,该脚本在一个环境中完美运行,但最近我将构建文件迁移到新机器,我面临以下问题。

使用过的NAnt代码: exec program =“cmd”commandline =“/ c $ {build.dir} \ XXX.vbs $ {build.version}”failonerror =“false”

收到NAne错误 外部程序失败:cmd(返回代码为1)

我可能尝试克服这个 我检查了环境变量,发现一切都很好,并且与旧机器进行比较以匹配相同的。

任何解决方案/评论??

1 个答案:

答案 0 :(得分:1)

似乎“cmd”正在运行,您无需提供完整路径。 “外部程序失败:cmd(返回代码为1)”错误表示'cmd'已运行,但它产生了错误。换句话说,你的VB脚本(即'XXX.vbs')失败了。请尝试以下方法查找实际错误:

  1. 验证“$ {build.dir} \ XXX.vbs”的扩展值是否为有效文件/位置。如果您正在使用相对路径,请仔细检查您的工作目录。

    <echo message="${build.dir}\XXX.vbs" />
    

    <echo message="${file::exists(build.dir + '\XXX.vbs')}" />
    
  2. 从命令行运行您的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" />
    
  3. 或者,使用'exec'任务的更好方法是使用嵌套的'arg'元素。如果您的参数中包含空格,这将有所帮助;并且您的脚本将更清晰:

    <exec program="cmd" failonerror="false">
        <arg value="/c" />
        <arg value="${build.dir}\XXX.vbs" />
        <arg value="${build.version}" />
    </exec>
    
  4. 最后,如果您的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
    
  5. 希望这有帮助。