Cake 是 C# Make 的缩写,是一个基于 C# DSL 的自动化构建系统。它可以用来编译代码,复制文件以及文件夹,运行单元测试,压缩文件以及构建 Nuget 包等等。
熟悉大名鼎鼎的 Make 的小伙伴,应该已经知道 Cake 大致是个什么样的工具了,Cake 具有以下几个特点:
笔者在 Github 上创建了一个简单的 DEMO(cake.demo),下面简单的介绍,项目非常简单,一个类库项目,一个测试项目,如下:
首先第一步下载一个基于 Powershell 的引导脚本文件 build.ps1,这个文件并不是必须的, 你可以直接用调用 cake 脚本文件),在项目所在的目录下运行: Invoke-webRequest http://cakebuild.net/download/bootstrapper/windows -OutFile build.ps1
备注:当前笔者是基于 windows 平台,开发环境是 vs 2017 community:
linux : curl -Lsfo build.sh http://cakebuild.net/download/bootstrapper/linux
mac : curl -Lsfo build.sh http://cakebuild.net/download/bootstrapper/osx
添加一个文本文件 build.cake(文件名随意,笔者懒调整 build.ps1 中指定的 cake 脚本文件而已。完整文件:https://github.com/linianhui/cake.demo/blob/master/build.cake)
这一步我们用 Cake 来 build 以下我们上面的 cake.demo 这个项目。文件内容如下:
- 1///args2var target = Argument("target","default");345///build task6 Task("build")7 .Does(() =>8{9 MSBuild("./cake.demo.sln",newMSBuildSettings{10 Verbosity =Verbosity.Minimal11});12});131415 Task("default")16 .IsDependentOn("build");171819///run task20 RunTarget(target);
脚本可以说是非常简单易懂,相信有 C# 基础的应该非常容易理解。
OK,我们来运行一下 build.ps1(初次运行它会下载 cake 所需的一些文件,这些文件会存放于 build.ps1 中指定的文件夹,默认是 tools 文件夹,感兴趣的可以看一看 build.ps1 里面干了什么)。咦,运行出错了!
原因是我的一个 Demo.Tests 这个项目引用了 xUnit 的包,MSBuild 没能正确的还原 nuget 包,这不知道算不算一个 bug,笔者之前用 Cake 的 MSBuild 来 build vs2015 的项目的时候是没有问题的,当前环境只安装了 VS2017。不过也正好,我们再用 Cake 来写一个还原 nuget 包的 task。
- 1///nuget task2 Task("restore-nuget-packages")3 .Does(() =>4{5 NuGetRestore("./cake.demo.sln");6 });
再运行一次:
这次可以了。
然后我们再依次的添加几个 task,清理 build 的文件:
- 1Task("clean")
- 2.Does(() =>3 {
- 4CleanDirectories("./src/*/bin");
- 5CleanDirectories("./test/*/bin");
- 6});
运行单元测试:
- 1 /// unit-test task
- 2Task("unit-test")
- 3.IsDependentOn("build")
- 4.Does(() =>5 {
- 6XUnit2("./test/*/bin/*/*.Tests.dll");
- 7});
然后运行一下:
在前面我们提到这个文件并不是必须的文件,而是用它来下载 Cake 所需要的相关文件,以及设置默认的 Cake 配置。再者,我们可以通过它来简化对 Cake 的调用,比如上面列出来的几个 task,我们可以通过传递参数给 build.ps1,来运行我们指定的 task(默认运行了 default 嘛)。比如:
仅清理项目的 build 生成的文件。
得益于 Cake 基于 C#DSL 来编写脚本,相比写 Powershell 或者其他的脚本来完成自动化构建,使得 C# 开发人员非常容易上手。
其次 Cake 基于 Roslyn 和 Mono,使得它可以提供跨平台的自动化构建,也可以运行在各种常用的 CI 系统之上。
再者 Cake 提供了丰富的内建工具集以及插件(Cake Addins),可以满足我们绝大部分的自动化构建需求,比如,编译,测试,打包,部署等等。
例如前些日子我的一个 web 的 demo 项目(https://github.com/linianhui/Ids3.demo)使用 cake 来部署 iis 站点。
Make
C# Make
Cake Addins
Cake on Github
Cake on dotnet foundation
cake.demo
http://cakebuild.net/docs/tutorials/getting-started
http://cakebuild.net/docs/resources/videos
https://github.com/cake-build/example
来源: http://www.cnblogs.com/linianhui/p/cake-overview.html