5

CSharp コードをコンパイルするために、Ant exec タスクから呼び出されるバッチ スクリプトがあります。バッチスクリプトは次のように構成されています

msbuild.exe %ARGS%
echo %ERRORLEVEL%

Ant でタスクを実行すると、次の結果が得られます。

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

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

%ERRORLEVEL% が 0 であるのに、Ant exec が戻りコード 2 を取得する可能性があるのはなぜですか? コマンドがコードを返さない場合、これはデフォルトのエラー コード セットですか? Ant ドキュメントのショー:

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>
4

3 に答える 3

2

ANTマニュアルには次のように記載されています。

エラーと戻りコード

デフォルトでは、aの戻りコード<exec>は無視されます。設定するfailonerror="true"と、リターンコードシグナリングの失敗(OS固有)によってビルドが失敗します。または、プロパティの名前を設定resultpropertyして、結果コードに割り当てることもできます(もちろん、不変性を除きます)。

プログラムの起動がOSに依存するエラーコードで失敗した場合は、に設定されて<exec>いない限りビルドを停止します。プログラムが存在する場合はそれを使用して実行できますが、それ以外の場合は何もしません。failifexecutionfailsfalse

これらのエラーコードはどういう意味ですか?まあ、それらはOSに依存しています。Windowsボックスでは、ドキュメントを確認する必要があります。エラーコード2は、「そのようなプログラムがない」ことを意味します。これは通常、パス上にないことを意味します。Antタスクからこのようなエラーが発生した場合は、通常、Antのバグではなく、マシンの構成に問題があります。

プログラムの戻りコードを取得するには、 execタスクのresultproperty属性を使用する必要があります。

于 2013-02-20T09:04:46.920 に答える
1

解決策を含む、この動作に関する ANT wiki の記事があります: http://wiki.apache.org/ant/AntOnWindows

于 2014-01-29T20:30:53.850 に答える
1

たくさんの順列を実行しました。私は試した:

  • 最後の終了ステートメントはなく、コマンドのみ
  • exit %errorlevel%
  • exit /b %errorlevel%
  • @comspec /c exit %errorlevel%

ant が正しいエラー コードを認識できるようにする唯一の手法は、exit %errorlevel%. スクリプトは現在正しく動作していますが、コマンド シェルから直接実行すると後でシェルが終了するため、少し面倒です。(スクリプトを介して呼び出すのはcmd /c機能しますが、面倒です。)

これらの結果を説明し、それらを拡張できる DOS の専門家からここに来たいです。ありがとう。

于 2013-02-21T08:35:55.707 に答える