2015-11-17 53 views
14

我正在使用Visual Studio任务运行器(2015)运行绑定到构建之前的Gulp任务。取消生成如果任务运行程序资源管理器任务失败

我已经设置好了,当gulp任务失败时,它会发送退出代码1,最后它会说“进程以代码1结束”。但是构建仍在继续。

这将取消在团队城市中的构建,所以似乎与Visual Studio中的Task Runner相关联。

如何防止构建发生,如果它退出与代码以外的代码0?

回答

14

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

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

集的预定生成事件

对于类库,可以访问编译通过右键单击您的项目并选择Properties -> Compile -> Build Events...活动。

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

这里是我用来调用在预生成事件的咕嘟咕嘟任务,这将阻止的MSBuild运行,如果有故障退出命令:

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

此命令调用咕嘟咕嘟传递绝对工作目录路径和gulpfile.js

注:

  • 我发现各种背景和工作试图用一个更直线上升命令状gulp my-task目录问题。
  • $(ProjectDir)Macros for Build Commands之一。
  • 假设Gulp全球安装:npm install -g gulp。请参阅jonas.ninjaanswer了解如何将此安装构建到命令中(或者不需要全局依赖的替代方法)。
+0

没想过这个选项,谢谢 – John

2

我在上面实现了davidmdem的解决方案,这在我的系统中很棒。我在全球安装了gulp,但其中一位同事没有,所以预建事件将会失败。从Task Runner Explorer运行gulp使用项目级别的 gulp安装,但从预生成脚本运行gulp使用全局 gulp安装。

为了防止局势的新的开发者没有安装一饮而尽哪里,我扩大davidmdem的预构建脚本如下: (gulp --version || npm install -g [email protected]) & gulp -b $(ProjectDir) --gulpfile $(ProjectDir)gulpfile.js my-task

此命令安装一饮而尽(3.9.0版本相匹配的项目 - 如果它尚未安装,则仅限于。现在,在建立项目之前,你不得不考虑大量的事情!


(更新:)

的替代(在我看来:更好)的解决这个问题是使用npm作为中介。从上面的例子继续修改,我有一个从命令行调用的吞咽任务my-task。这删除了全局gulp依赖关系,如果gulp失败,仍然会正确停止msbuild。

预生成事件:

npm run build 

的package.json:

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

我建立失败与一饮而尽工作jshint(不够好对我来说,也许足够了别人)。我想它可能会扩展到包括任务亚军中的所有任务。

这是我用/没有...

this页,我说/我项目以.json,其钩到预生成事件编辑这个...

"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')) 
}); 

后两行是在以下...最重要的。如果您尚未拥有它,您将需要npm install jshint-stylish

另外,对于jshint-stylish,你可以让VS为你处理它。下面添加到您的以.json所示为jshint-stylish行...

{ 
    "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" 
    } 
} 

这给了我这个时候出现错误(除了构建失败),这是足以让我进一步挖掘如果/必要... vs error list window after build

由于相对于更详细的错误信息运行通过命令行或任务运行同一任务时,我得到... gulp default task output via cmd.exe

我想这溶胶可以改进,但我想分享,因为我没有在其他地方看过很多。

干杯。

相关问题