2011-08-24 24 views
1

我想執行一個NAnt生成腳本,這是完全在一個環境中工作,但最近我已經遷移我的生成文件到一個新的機器,我面臨的問題。南特建立錯誤:C​​md

惡性代碼中使用: EXEC程序= 「CMD」 命令行= 「/ C $ {build.dir} \ XXX.vbs $ {} build.version」 failonerror = 「假」

娜收到錯誤 外部程序失敗:CMD(返回代碼爲1)

我可能會嘗試克服這個 我檢查了環境變量,發現個個都是精品,並與舊機相匹配的比較相同。

任何解決方案/評論

+0

如果您提供cmd.exe的完整路徑,會發生什麼情況? 'C:\ Windows \ system32 \ cmd.exe' – johnluetke

+0

@johnluetke>嗯..沒有嘗試過..Lemme試試..謝謝:) –

回答

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. 在命令行中運行你的腳本楠。這會給你一個更好的錯誤信息,就像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 
    

希望這有助於。