2

我有一个 ASP.NET 解决方案,我在其中使用 gulp 执行一些任务(例如,较少的编译)。在 Visual Studio 中,相应的 gulp-task 绑定到 BeforeBuild 事件,因此每当我构建解决方案时它都会自动启动。

我正在尝试使用蛋糕来构建和打包解决方案。虽然使用DotNetBuild()orMSBuild()任务构建解决方案工作正常,但 gulp 任务在构建期间不会执行。

似乎 gulp(可能还有其他任务运行器)不会自动“集成”在构建过程中。

cake 是否以某种方式支持在构建过程中调用 gulp?
(当然,理想情况下,如果 gulp 不可用,它也应该自行恢复(使用 npm / package.json)。)

4

2 回答 2

5

注意:此答案是从 Mattias Karlsson 的Cake 问题响应中复制的 (经他的许可)。


只是快速浏览了一下,所以我可能遗漏了一些东西,但是检查 csproj 文件,BeforeBuildMSBuild 目标似乎是空的?

WebApplication1 构建事件

Visual Studio 2015 有一个用于 Gulp/Grunt 的内置任务运行器,所以这可能是正在发生的事情。

目前我们没有 NPM 或 Gulp 的别名(虽然那将是一个很棒的插件),但你可以做的是通过StartProcess别名自己调用 Gulp。我在下面稍微调整了你的build.cake

var target = Argument("target", "Default");

DirectoryPath solutionDir = MakeAbsolute(Directory("./"));
FilePath solution    = solutionDir.CombineWithFilePath("WebApplication1.sln");
DirectoryPath projectDir  = solutionDir.Combine("WebApplication1");
FilePath lessOutput  = projectDir.CombineWithFilePath("css/style.css");

Task("Default")
  .Does(() =>
{
  NuGetRestore(solution);

  if (FileExists(lessOutput))
  {
    Information("Cleaning old less output {0}", lessOutput);
    DeleteFile(lessOutput);
  }

  StartProcess("cmd", new ProcessSettings {
    Arguments = "/c \"set CI=true && npm install && gulp compile-less\"",
    WorkingDirectory = projectDir
  });

  if (!FileExists(lessOutput))
  {
    throw new Exception("Less failed to create " + lessOutput);
  }
  Information("Less created {0}", lessOutput);

  MSBuild(solution);
});

RunTarget(target);

这假设您已全局安装了 Node 和 Gulp(您通过 running 全局安装 Gulp npm install -g gulp),这也是 5 分钟快速而肮脏的,因此您希望将清理/恢复/更少划分为单独的蛋糕任务。我设置环境CI=true是因为某些节点模块可能需要用户交互才能恢复。

放弃上面的 MSBuild / NuGet 还原将输出如下内容:

Cleaning old less output C:/temp/cake_issue_672/WebApplication1/WebApplication1/css/style.css
[11:26:12] Using gulpfile C:\temp\cake_issue_672\WebApplication1\WebApplication1\gulpfile.js
[11:26:12] Starting 'compile-less'...
[11:26:13] Finished 'compile-less' after 29 ms
Less created C:/temp/cake_issue_672/WebApplication1/WebApplication1/css/style.css

这可能不是您正在努力的解决方案,但它“应该” 工作。

于 2016-02-04T11:48:31.207 回答
2

更新:现在有一个用于运行 Gulp 任务的 Cake 插件。你可以在这里找到

至于为什么在 Cake 中使用 MSBuild Alias 不会调用 BeforeBuild 目标,我们不确定。我能否请您在这里提出一个问题,以便我们进行讨论。理想情况下,可以提供一个演示问题的示例项目,以便我们进行调查。

不过,要回答您的总体问题...

不,目前,没有 Cake Aliases/Addin 支持将 Gulp 任务作为构建管道的一部分运行。这并不是说这不能完成,只是它还没有出现在我们的雷达上。

话虽如此,鉴于您可以编写任意 C# 作为构建脚本的一部分,没有理由不能生成一个进程来调用 gulp 并使用必要的参数来完成工作。

于 2016-02-04T07:31:14.763 回答