[Cake] 0.C#Make自动化构建-简介

0. Cake是什么?

Cake是C# Make的缩写,是一个基于C# DSL的自动化构建系统。它可以用来编译代码,复制文件以及文件夹,运行单元测试,压缩文件以及构建Nuget包等等。

熟悉大名鼎鼎的Make的小伙伴,应该已经知道Cake大致是个什么样的工具了,Cake具有以下几个特点:

  1. 方便编写:使用基于C#的DSL,非常易于编写自动化的脚本。

  2. 跨平台: 基于Roslyn和Mono来编译我们写的自动化脚本,使得它可以运行在windows,linux,mac上。

  3. 可靠的:可以建立在自己的机器上,也可以建立在像AppVeyor,TeamCity,TFS,VSTS或Jenkins这样的CI系统上,都可以以相同的方式运行。

  4. 丰富的工具集:支持MSBuild,MSTest,xUnit,NUnit,Nuget,ILMerge,Wix和SignTool等等,以及支持丰富的插件(Cake Addins)。

  5. 开源:基于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 task20 RunTarget(target);

脚本可以说是非常简单易懂,相信有C#基础的应该非常容易理解。

  1. 首先,创建了一个参数target(名字和build.ps1中指定的参数名一致),默认值是“default”。

  2. 其次,创建了一个名为build的Task,这个task调用MSBuild来build我们的项目。

  3. 然后,创建了一个名为default的task,它什么都没干,只是标识说我依赖一个为build的task,含义就是在运行default的task之前,会先运行build的task。

  4. 最后,用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. 参考资料

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


.NET社区新闻,深度好文,微信中搜索dotNET跨平台或扫描二维码关注

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/325618.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

99%的面试官都会问到的Java面试题

转载自 99%的面试官都会问到的Java面试题 最近是招聘季,所谓金九银十,正是跳槽的好几节。今天,给大家整理了一些Java面试常考的经典题目,我们一道一道来分析一下。 经典面试题 1、谈谈你对 Java 平台的理解?“Java …

想对你们每个人说的话

135编辑器1吉方鑫:方鑫,在我和王老师面前,你永远都是那么的乖,爱笑,常言道:爱笑的人运气不会太差,希望你也是如此哦,现在的学业已经到了三期了,相信你也知道后期的学习该…

Dora.Interception: 一个为.NET Core度身定制的AOP框架

多年从事框架设计开发使我有了一种强迫症,那就是见不得一个应用里频繁地出现重复的代码。之前经常Review别人的代码,一看到这样的程序,我就会想如何将这些重复的代码写在一个地方,然后采用“注入”的方式将它们放到需要的程序中。…

揭秘阿里秒级百万TPS平台架构实现

转载自 揭秘阿里秒级百万TPS平台架构实现 导读:搜索离线数据处理是一个典型的海量数据批次/实时计算结合的场景,阿里搜索中台团队立足内部技术结合开源大数据存储和计算系统,针对自身业务和技术特点构建了搜索离线平台,提供复杂…

相对你们说的一些话

135编辑器1田文豪:文豪,最近上课我看你很认真,面试题也背的挺好的,你在很努力的学习了,这是一个非常好的趋势,希望你能一直保持下去。你的脑字也是很灵活的,好几次考试都超出了我的预想&#xf…

Build 2017 | 一文看懂微软 Build 2017 大会:让 AI 走向边缘

200 多家明星企业,20 位著名投资机构顶级投资人共同参与!「新智造成长榜」致力于发掘 AI 领域有 “三年十倍” 成长潜力的创新公司,下一波 AI 独角兽,会有你么?点击阅读原文了解详情! 雷锋网按:…

一文带你理解Java中Lock的实现原理

转载自 一文带你理解Java中Lock的实现原理 当多个线程需要访问某个公共资源的时候,我们知道需要通过加锁来保证资源的访问不会出问题。java提供了两种方式来加锁,一种是关键字:synchronized,一种是concurrent包下的lock锁。syn…

请19级的童鞋们接收一下

135编辑器1李磊:磊,假期过的可好?有没有人在写作业呀?通过这段时间的学习,可以看得出你对我们的课程兴趣浓厚,尤其是scratch,自己做了好多的案例,之前还以为你们都是从网上直接下载的…

微软Build 2017首日主角AI 同时发布.NET Core 2.0 Preview 1

软公司一年一度的开发者大会,即“Microsoft Build 2017”在总部西雅图正式开幕。按照官方安排,本次大会将持续 3 天,主题围绕微软公司各项最新技术成果的展示和研讨,包括与微软相关的产业界人士的沟通和互动,以及对未来…

彻底理解HashMap的元素插入原理

转载自 彻底理解HashMap的元素插入原理 HashMap,是Java语言中比较基础也比较重要的一种数据结构,由于其用途广泛,所以,Java的工程师在设计HashMap的时候考虑了很多因素。 通过阅读HashMap的源码,可以学习到很多知识…

使用C#操作XML文件

今天更新一篇技术文章&#xff0c;使用C#实现对XML的操作&#xff1a;首先需要准备一个测试的XML文件&#xff0c;我这边命名为test.xml:文件内容为&#xff1a;<test><id>1</id><name>张三</name><age>18</age><id>2</id&…

Linux使用Jexus托管Asp.Net Core应用程序

第一步 安装.Net Core环境 安装 dotnet 环境参见官方网站 https://www.microsoft.com/net/core。 选择对应的系统版本进行安装。安装完成过后 输入命令查看版本&#xff0c;目前最新版为 1.04&#xff1a; dotnet --version 此时已经可以发布Asp.Net Core应用程序到Linux上…

优秀学生专栏——董超

优秀学生--董超今天回访了下17级优秀学生董超同学&#xff0c;董超同学在校期间一直担任小组组长&#xff0c;平时学习刻苦认真&#xff0c;各个阶段的项目也做的非常优秀&#xff0c;今年5月份左右毕业&#xff0c;所在岗位是开发&#xff0c;目前的薪资在5000左右&#xff0c…

高级开发必须理解的Java中SPI机制

转载自 高级开发必须理解的Java中SPI机制 本文通过探析JDK提供的&#xff0c;在开源项目中比较常用的Java SPI机制&#xff0c;希望给大家在实际开发实践、学习开源项目提供参考。 SPI是什么 SPI全称Service Provider Interface&#xff0c;是Java提供的一套用来被第三方实…

以深圳.NET俱乐部名义 的技术交流会圆满成功

2017年5月13日的深圳下着暴雨&#xff0c;一场以深圳.NET俱乐部名义的.NET技术交流会在微软Build 2017刚闭幕时在罗湖布吉路与翠山路交界处富基PARK国际6F举办&#xff0c;这次交流以微软Build 2017 大会发布的.NET Standard 2.0 Preview1/.NET Core 2.0 Preview 1为契机&#…

关于勒索病毒 Ransom:Win32.WannaCrypt 解决方案的最后一次说明

2017/5/12 晚&#xff0c;勒索软件 Ransom:Win32.WannaCrypt 大面积暴发。比病毒爆发更火的&#xff0c;则是各类关于此病毒的新闻、解决方法在朋友圈等社交媒体的爆发。 其中&#xff0c;有主观善意但客观一知半解的指导&#xff0c;更有夹带私货的安全软件商携各类工具的广告…

C#中的序列化和反序列化案例

序列化&#xff1a;是将对象的状态存储到特定存储介质的过程&#xff0c;也可以说是将对象状态转换为可保持或传输的格式的过程。上面的解释是官方定义&#xff0c;大白话解释就是&#xff0c;将对象以二进制的方式存储在文件中&#xff0c;如果简简单单的将一些数据或者内容存…

浅谈MySQL的B树索引与索引优化

转载自 浅谈MySQL的B树索引与索引优化 MySQL的MyISAM、InnoDB引擎默认均使用B树索引&#xff08;查询时都显示为“BTREE”&#xff09;&#xff0c;本文讨论两个问题&#xff1a; 为什么MySQL等主流数据库选择B树的索引结构&#xff1f; 如何基于索引结构&#xff0c;理解常…

.NET特性:异步流

自从VB/C#开始支持async/await后&#xff0c;开发者一直在期待异步版本的IEnumerable。但直到C# 7和ValueTask发布前&#xff0c;从性能的角度来看这一要求几乎是不可能实现的。 在老版本C#中&#xff0c;开发者每次使用await时都需要进行内存分配。如果要枚举10,000个项&…