. Cake是什么?
Cake是C# Make的缩写,是一个基于C# DSL的自动化构建系统。它可以用来编译代码,复制文件以及文件夹,运行单元测试,压缩文件以及构建Nuget包等等。
熟悉大名鼎鼎的Make的小伙伴,应该已经知道Cake大致是个什么样的工具了,Cake具有以下几个特点:
- 方便编写:使用基于C#的DSL,非常易于编写自动化的脚本。
- 跨平台: 基于Roslyn和Mono来编译我们写的自动化脚本,使得它可以运行在windows,linux,mac上。
- 可靠的:可以建立在自己的机器上,也可以建立在像AppVeyor,TeamCity,TFS,VSTS或Jenkins这样的CI系统上,都可以以相同的方式运行。
- 丰富的工具集:支持MSBuild,MSTest,xUnit,NUnit,Nuget,ILMerge,Wix和SignTool等等,以及支持丰富的插件(Cake Addins)。
- 开源:基于MIT开放源代码(Cake on Github),并且是.NET 基金会支持的一个项目(Cake on dotnet foundation)。
1. 一个简单的DEMO
笔者在Github上创建了一个简单的DEMO(cake.demo),下面简单的介绍,项目非常简单,一个类库项目,一个测试项目,如下:
1.1 下载引导脚本
首先第一步下载一个基于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
1.2 创建Cake脚本
添加一个文本文件build.cake(文件名随意,笔者懒调整build.ps1中指定的cake脚本文件而已。完整文件:https://github.com/linianhui/cake.demo/blob/master/build.cake)
这一步我们用Cake来build以下我们上面的cake.demo这个项目。文件内容如下:
1 /// args
2 var target = Argument("target", "default");
3
4
5 /// build task
6 Task("build")
7 .Does(() =>
8 {
9 MSBuild("./cake.demo.sln", new MSBuildSettings{
10 Verbosity = Verbosity.Minimal
11 });
12 });
13
14
15 Task("default")
16 .IsDependentOn("build");
17
18
19 /// run task
20 RunTarget(target);
脚本可以说是非常简单易懂,相信有C#基础的应该非常容易理解。
- 首先,创建了一个参数target(名字和build.ps1中指定的参数名一致),默认值是“default”。
- 其次,创建了一个名为build的Task,这个task调用MSBuild来build我们的项目。
- 然后,创建了一个名为default的task,它什么都没干,只是标识说我依赖一个为build的task,含义就是在运行default的task之前,会先运行build的task。
- 最后,用RunTarget来运行指定名字的task。
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 task
2 Task("restore-nuget-packages")
3 .Does(() =>
4 {
5 NuGetRestore("./cake.demo.sln");
6 });
再运行一次:
这次可以了。
然后我们再依次的添加几个task,清理build的文件:
1 Task("clean") 2 .Does(() => 3 { 4 CleanDirectories("./src/*/bin"); 5 CleanDirectories("./test/*/bin"); 6 });
运行单元测试:
1 /// unit-test task 2 Task("unit-test") 3 .IsDependentOn("build") 4 .Does(() => 5 { 6 XUnit2("./test/*/bin/*/*.Tests.dll"); 7 });
然后运行一下:
1.3 build.ps1
在前面我们提到这个文件并不是必须的文件,而是用它来下载Cake所需要的相关文件,以及设置默认的Cake配置。再者,我们可以通过它来简化对Cake的调用,比如上面列出来的几个task,我们可以通过传递参数给build.ps1,来运行我们指定的task(默认运行了default嘛)。比如:
仅清理项目的build生成的文件。
2. 总结
得益于Cake基于C#DSL来编写脚本,相比写Powershell或者其他的脚本来完成自动化构建,使得C#开发人员非常容易上手。
其次Cake基于Roslyn和Mono,使得它可以提供跨平台的自动化构建,也可以运行在各种常用的CI系统之上。
再者Cake提供了丰富的内建工具集以及插件(Cake Addins),可以满足我们绝大部分的自动化构建需求,比如,编译,测试,打包,部署等等。
例如前些日子我的一个web的demo项目(https://github.com/linianhui/Ids3.demo)使用cake来部署iis站点。
3. 参考资料
http://cakebuild.net/docs/tutorials/getting-started
相关推荐
C#自动化测试工具编写-WindowsFormsTest: 在日常编码过程中,我们常常会进行自动化测试。这里的自动化测试不是指单元测试,而是模拟人工输入来进行快速的、高并发的测试。可以使用的自动化工具有LOADRUNNER,以及...
c#图片文字-字母-数字自动识别-深入代码-非常好
c#没有现成的multipart/form-data库,自己封的一个demo供参考。
C#打印操作实例--实现分页打印操作源码(十分经典) C#打印操作实例--实现分页打印操作源码(十分经典)
本资源为C#实现Rs232通讯程序,经本人测试有效,可以自动获取本机com口,实现数据发送,但是接收没有测试。
通过C#读写 S7-200 SMART PLC 文档中的代码全部通过实物测试确认可以 读写参数。只需要按文档中的步骤即可 读写参数
用C#实现了多边形的布尔运算,采用栅格法,功能是两多边形的交并差,也可以简化为两矩形的交并差求解!
C#源码系列7---一个开源ERP源码(C#)
按照C#发现之旅 --- C#开发Windows Service程序 pdf 自己实践编写的实例 绝对能用 为了多谢大家的支持免费下载啦
C#发现之旅 --- C#开发Windows Service程序 pdf 我的另一个资源中有免费实例
C#winform打印指定区域---控件拖动---设置文本颜色及字体样式
OPC客户端(C#完整源码)--完整版)
在日常编码过程中,我们常常会进行自动化测试。这里的自动化测试不是指单元测试,而是模拟人工输入来进行快速的、高并发的测试。可以使用的自动化工具有LOADRUNNER,以及目前在VS2010中的功能很强大的测试工作平台...
自动化程序框架,C#语言,运动控制
使用c#语言自动化执行httpWatch,然后将执行结果保存到csv文件中。
一个简单的自动化测试架构的实现(C#).属性会作为元数据嵌入到程序集,通过反射机制能够得到这些元数据信息。程序员可以自己定义属性,对属性进行某种格式的定义,并利用属性来影响自己编写代码编译后的程序集...
c#下post 发送 multipart/form-data和JSON数据
C#实现字符串SHA-256加密算法工程下载,VS2013工程,使用系统带的加密库, using System.Security.Cryptography;
基于FFMEPEG-MATLAB和C#-SQL SERVER构建的手机录音数据库及特征分析
基于C#和XML的自动化测试框架系统的设计 很好的书!