18

ビルド前にバインドされた Gulp タスクを実行するために、ビジュアル スタジオ タスク ランナー (2015) を使用しています。

gulpタスクが失敗したときに終了コード1を送信し、最後に「コード1でプロセスが終了しました」と表示されるように設定しました。ただし、ビルドは続行されます。

これにより、チームシティでのビルドがキャンセルされるため、ビジュアルスタジオ内のタスクランナーにリンクされた問題のようです.

0 以外のコードで終了した場合、ビルドが行われないようにするにはどうすればよいですか?

4

3 に答える 3

18

これはタスク ランナーの問題のように思われるという点で正しいです。BeforeBuild タスクが失敗した場合、タスク ランナーは MSBuild と通信してビルドを停止しません。

これを回避するには、Task Runner バインディングではなく、プロジェクトのビルド前イベントを介して Gulp タスクを実行できます。

ビルド前イベントを設定する

クラス ライブラリの場合、プロジェクトを右クリックして を選択すると、ビルド イベントにアクセスできますProperties -> Compile -> Build Events...

Web プロジェクトの場合、それらは にありProperties -> Build Eventsます。

ビルド前のイベントで Gulp タスクを呼び出すために使用したコマンドを次に示します。これにより、失敗して終了した場合に MSBuild が実行されなくなります。

gulp -b $(ProjectDir) --gulpfile $(ProjectDir)gulpfile.js my-task

このコマンドは、作業ディレクトリと の絶対パスを渡して Gulp を呼び出しますgulpfile.js

ノート:

  • のようなよりストレートなコマンドを使用しようとすると、あらゆる種類のコンテキストと作業ディレクトリの問題が見つかりましたgulp my-task
  • $(ProjectDir)Build Commandsのマクロの 1 つです。
  • Gulp がグローバルにインストールされていることを前提としています: npm install -g gulp. このインストールをコマンドに組み込む方法 (またはグローバルな依存関係を必要としない代替手段) については、jonas.ninja回答を参照してください。
于 2015-11-20T22:26:10.003 に答える
2

上記のdavidmdemのソリューションを実装しましたが、私のシステムでは素晴らしかったです。私はgulpグローバルにインストールしましたが、同僚の 1 人がそうしなかったため、ビルド前のイベントは失敗しました。Task Runner Explorer から gulp を実行すると、プロジェクト レベルのgulp インストールが使用されますが、ビルド前スクリプトから gulp を実行すると、グローバルgulp インストールが使用されます。

新しい開発者が gulp をインストールしていないという状況を防ぐために、davidmdem のビルド前スクリプトを次のように拡張しました。 (gulp --version || npm install -g gulp@3.9.0) & gulp -b $(ProjectDir) --gulpfile $(ProjectDir)gulpfile.js my-task

このコマンドは、まだインストールされていない場合にのみ、gulp (プロジェクト レベルの gulp インストールと一致するバージョン 3.9.0) をインストールします。プロジェクトをビルドする前に、gulp について考える必要はありません。


(アップデート:)

この問題に対する別の (私の意見では: より良い) 解決策はnpm、仲介者として使用することです。my-task上記の例を続けて変更すると、コマンド ラインから呼び出されるgulp タスクがあります。これにより、グローバルな gulp 依存関係が削除され、gulp が失敗した場合でも msbuild が適切に停止します。

ビルド前イベント:

npm run build

パッケージ.json:

"scripts": {
  "build": "gulp min"
}
于 2016-03-17T15:17:25.947 に答える