2013-02-20 38 views
4

我有一個從Ant exec任務調用的批處理腳本來編譯一些CSharp代碼。當任務在Ant中運行該批處理腳本以下面的方式爲什麼Ant Exec任務返回代碼與ERRORLEVEL值不匹配?

msbuild.exe %ARGS% 
echo %ERRORLEVEL% 

現在的結構,我得到以下結果:

[exec] Time Elapsed 00:00:09.48 
[exec] 0 

BUILD FAILED 
C:\proj\build.xml:410: exec returned: 2 

怎麼可能是%ERRORLEVEL%爲0,但Ant exec獲取2的返回碼?如果命令沒有返回代碼,這是否設置了一些默認的錯誤代碼?螞蟻文檔顯示:

error code 2 means 'no such program', 

但很明顯,我的批處理文件正在正確執行。

更新使用Ant代碼

<target name="build.csharp" if="isWindowsPlatform"> 
    <exec executable="cmd.exe" failOnError="true"> 
     <arg value="/c"/> 
     <arg value="build.csharp.bat" /> 
    </exec> 
</target> 
+1

你能發佈一些或全部build.xml文件的?我有一個類似的問題,我試圖啓動exe的使用屬性,如,然後我只是把滿路徑直接進入exec命令,它打開了exe文件對我來說沒問題! – Roger 2013-02-20 03:00:06

+0

添加了我的螞蟻代碼 – cmcginty 2013-02-22 20:22:58

回答

1

ANT manual狀態:

錯誤和返回代碼

缺省情況下<exec>的返回碼被忽略;當您設置failonerror="true"時,任何返回代碼信號故障(操作系統特定)都會導致構建失敗。或者,您可以將resultproperty設置爲某個屬性的名稱,並將其分配給結果代碼(當然,除了不可變性)。

如果嘗試啓動程序失敗,並顯示與操作系統相關的錯誤代碼,則<exec>將暫停構建,除非failifexecutionfails設置爲false。如果它存在,你可以用它來運行一個程序,但是否則什麼也不做。

這些錯誤代碼是什麼意思?那麼,他們是操作系統的依賴。在Windows上,您必須查看文檔;錯誤代碼2意味着'沒有這樣的程序',這通常意味着它不在路徑上。每當你看到任何Ant任務發生這樣的錯誤時,它通常不是一個Ant錯誤,而是你的機器上的一些配置問題。

要獲得程序的返回代碼,你需要使用exec taskresultproperty屬性。

+0

其實我沒有試圖得到錯誤級別。我只是希望Ant行爲正確,所以我不認爲這是問題。 – cmcginty 2013-02-21 08:29:39

+0

@Casey發佈您正在執行的build.xml片段,也許有人可以提供幫助。 ANT可能很好地表現正確:-) – 2013-02-21 19:48:21

+0

添加了ant代碼 – cmcginty 2013-02-22 20:23:55

1

我跑了一堆排列。我想:

  • 沒有最終退出聲明,只是命令
  • exit %errorlevel%
  • exit /b %errorlevel%
  • @comspec /c exit %errorlevel%

唯一的技術,該技術將允許螞蟻看到正確的錯誤代碼爲exit %errorlevel% 。雖然腳本現在可以正常工作,但是由於直接從命令shell運行它會導致shell在之後退出,所以稍微有些惱人。 (通過cmd /c工程調用腳本,但很麻煩。)

我很樂意從DOS專家那裏解釋這些結果並對其進行擴展。謝謝。

相關問題