【问题标题】:NANT Build error : CmdNANT 构建错误:Cmd
【发布时间】:2011-09-29 09:17:48
【问题描述】:

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

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

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

我可能会尝试克服这个问题 我检查了环境变量,发现一切都很好,也和老机器比对了。

任何解决方案/cmets ??

【问题讨论】:

  • 如果您提供 cmd.exe 的完整路径会怎样? C:\Windows\system32\cmd.exe
  • @johnluetke > 嗯..没试过..让我试试..谢谢:)

标签: build command nant


【解决方案1】:

似乎“cmd”正在运行,您不需要提供完整路径。错误“External Program Failed: cmd (return code was 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 Script Host 的弹出错误。

    C:\YourTools\NAnt.exe -buildfile:MyBuildScript.build
    

    避开命令窗口,重定向程序的输出。将“>> 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
    

希望这会有所帮助。

【讨论】:

    猜你喜欢
    • 2011-04-11
    • 1970-01-01
    • 2012-12-31
    • 2012-04-17
    • 2012-01-29
    • 2018-05-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多