我想執行一個NAnt生成腳本,這是完全在一個環境中工作,但最近我已經遷移我的生成文件到一個新的機器,我面臨的問題。南特建立錯誤:Cmd
惡性代碼中使用: EXEC程序= 「CMD」 命令行= 「/ C $ {build.dir} \ XXX.vbs $ {} build.version」 failonerror = 「假」
娜收到錯誤 外部程序失敗:CMD(返回代碼爲1)
我可能會嘗試克服這個 我檢查了環境變量,發現個個都是精品,並與舊機相匹配的比較相同。
任何解決方案/評論
我想執行一個NAnt生成腳本,這是完全在一個環境中工作,但最近我已經遷移我的生成文件到一個新的機器,我面臨的問題。南特建立錯誤:Cmd
惡性代碼中使用: EXEC程序= 「CMD」 命令行= 「/ C $ {build.dir} \ XXX.vbs $ {} build.version」 failonerror = 「假」
娜收到錯誤 外部程序失敗:CMD(返回代碼爲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')}" />
在命令行中運行你的腳本楠。這會給你一個更好的錯誤信息,就像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" />
或者,使用'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
希望這有助於。
如果您提供cmd.exe的完整路徑,會發生什麼情況? 'C:\ Windows \ system32 \ cmd.exe' – johnluetke
@johnluetke>嗯..沒有嘗試過..Lemme試試..謝謝:) –