注意:此答案是从 Mattias Karlsson 的Cake 问题响应中复制的
(经他的许可)。
只是快速浏览了一下,所以我可能遗漏了一些东西,但是检查 csproj 文件,BeforeBuild
MSBuild 目标似乎是空的?
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
这可能不是您正在努力的解决方案,但它“应该”
工作。