如果任务运行器资源管理器任务失败,请取消构建

时间:2015-11-17 14:29:25

标签: visual-studio gulp task-runner-explorer

我正在使用visual studio task runner(2015)运行绑定到构建之前的Gulp任务。

我已将其设置为当gulp任务失败时它会发送退出代码1,最后它会显示"流程终止于代码1。"然而,构建仍在继续。

这将取消团队城市的构建,因此看起来问题链接在Visual Studio内的Task Runner。

如果使用0以外的代码退出构建,如何阻止构建?

3 个答案:

答案 0 :(得分:17)

你是对的,因为这似乎是一个任务运行者问题。如果BeforeBuild任务失败,任务运行器不与MSBuild通信以停止构建。

要解决这个问题,您可以通过项目的预构建事件而不是通过Task Runner绑定来运行Gulp任务。

设置预构建事件

对于类库,您可以通过右键单击项目并选择Properties -> Compile -> Build Events...来访问构建事件。

对于网络项目,它们位于Properties -> Build Events

以下是我用于在预构建事件中调用Gulp任务的命令,如果它以失败退出,将阻止MSBuild运行:

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

此命令调用Gulp传递工作目录和gulpfile.js的绝对路径。

注意:

  • 我发现各种上下文和工作目录问题试图使用更直接的命令,如gulp my-task
  • $(ProjectDir)是其中一个Macros for Build Commands
  • 假设Gulp全球安装:npm install -g gulp。有关如何在命令中构建此安装(或者不需要全局依赖的替代方法),请参阅jonas.ninja' answer

答案 1 :(得分:2)

我在上面实施了davidmdem的解决方案,它很棒......在我的系统上。我在全球范围内安装了gulp,但我的一个同事没有安装,因此预构建事件将失败。从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(版本3.9.0以匹配项目级gulp安装)(如果尚未安装)。在构建项目之前,现在不需要考虑gulp!

<强> (更新:)

另一种(在我看来:更好)解决此问题的方法是使用npm作为中间人。从上面的例子继续和修改,我有一个从命令行调用的gulp任务my-task。这消除了全局gulp依赖性,如果gulp失败,仍然可以正常停止msbuild。

预建活动:

npm run build

<强>的package.json:

"scripts": {
  "build": "gulp min"
}

答案 2 :(得分:2)

我为jshint构建失败并且gulp工作(对我来说足够好,对其他人来说也足够了。)我想它可以扩展到包括Task Runner中的所有任务。

这是我用过/做过的......

根据this页面,我在项目 .json中添加/编辑了这个,它挂钩到prebuild事件......

  "scripts": {
    "prebuild": [ "gulp default" ]
  }

根据this页面,我为jshint任务添加了以下内容......

// =============================
// jsHint - error detection
// =============================
gulp.task("jshint", function () {
    var jshGlobals = [
        '$',
        'jQuery',
        'window',
        'document',
        'Element',
        'Node',
        'console'
    ];

    gulp.src([paths.jsFiles, norefs])
        .pipe(jshint({
            predef: jshGlobals,
            undef: true,
            eqnull: true
        }))
        .pipe(jshint.reporter('jshint-stylish'))
        .pipe(jshint.reporter('fail'))
});

后两行是最重要的。如果您还没有安装jshint-stylish,则需要安装jshint-stylish

或者,对于jshint-stylish,您可以让VS为您处理。如下所示,将{ "name": "ASP.NET", "version": "0.0.0", "devDependencies": { "es6-promise": "~3.1.2", "gulp": "^3.8.11", "del": "^2.2.0", "jshint": "~2.9.1", "jshint-stylish": "~2.1.0", "gulp-jshint": "~2.0.0", "gulp-flatten": "~0.2.0", "gulp-rename": "~1.2.2", "gulp-cssmin": "0.1.7", "gulp-uglify": "1.2.0", "gulp-postcss": "~6.1.0", "autoprefixer": "~6.3.3" } } 的行添加到 .json ...

{{1}}

当出现错误(除了失败的构建之外)时,这给了我这个,这足以让我在必要时进一步挖掘...... vs error list window after build

与通过命令行或任务运行程序运行相同任务时获得的更详细的错误信息相反... gulp default task output via cmd.exe

我想这个解决方案可以改进,但我想分享一下,因为我在其他地方没有看到很多关于它的内容。

干杯。