これはタスク ランナーの問題のように思われるという点で正しいです。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の回答を参照してください。