M4N*_*M4N 2 asp.net gulp cakebuild
我有一个ASP.NET解决方案,其中我使用gulp执行一些任务(例如,较少编译)。在Visual Studio中,相应的gulp-task绑定到BeforeBuild事件,因此每当我构建解决方案时它将自动启动。
我正在尝试用Cake构建和包装解决方案。虽然使用DotNetBuild()或MSBuild()任务构建解决方案都可以正常工作,但是在构建过程中不会执行gulp任务。
似乎gulp(可能还有其他任务运行器)在构建过程中不会自动“集成”。
蛋糕在构建过程中是否以某种方式支持调用gulp?
(当然,理想情况下,如果不可用,它还应该还原gulp本身(使用npm / package.json)。)
注意:此答案是 Mattias Karlsson(经他的许可)从Cake问题回复中复制的 。
只是快速浏览一下,所以我可能会丢失一些东西,但是检查csproj文件,BeforeBuildMSBuild目标似乎为空?

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);
Run Code Online (Sandbox Code Playgroud)
假设您已全局安装了Node&Gulp(通过运行全局安装了Gulp npm install -g gulp),这又花了5分钟时间,而且又很脏,因此您需要将clean / restore / less划分为单独的Cake任务。我设置环境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
Run Code Online (Sandbox Code Playgroud)
这可能不是您要使用的解决方案,但它应该“ 起作用”。