[Cake] 0.C#Make自动化构建-简介
0. 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 task20 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 task2 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跨平台或扫描二维码关注
[Cake] 0.C#Make自动化构建-简介相关推荐
- 前端工程化实战 - 自动化构建工具
文章目录 一.自动化构建简介 二.自动化构建初体验 2.1 场景描述 2.2 实际操作体验 三.常用的自动化构建工具 3.1 Grunt 3.2 Gulp 3.3 FIS 四.自动化构建工具 Grun ...
- 手把手0基础项目实战(一)——教你搭建一套可自动化构建的微服务框架(SpringBoot+Dubbo+Docker+Jenkins)...
本文你将学到什么? 本文将以原理+实战的方式,首先对"微服务"相关的概念进行知识点扫盲,然后开始手把手教你搭建这一整套的微服务系统. 项目完整源码下载 https://github ...
- 前端自动化构建工具:用Gulp4.0搭建一个基本的前端开发环境
一个项目的完成一般需要经过三个步骤:初始化.开发和部署.在前端开发过程中,我们经常需要依靠一些自动化构建工具来优化前端工作流程,来帮助我们完成一系列繁琐的工作,例如浏览器热更新.ES6编译.代码压缩. ...
- 前端自动化构建-为什么使用前端自动化构建以及gulp简介
前端自动化构建-为什么使用前端自动化构建以及gulp简介 一开始接触到这个东西,真的是不知道是什么样的一个概念,所以也在网上看了一一些资料,理解一下. 1. 前端开发存在的问题 开发慢 (1) 项目架 ...
- 手把手0基础项目实战(一)——教你搭建一套可自动化构建的微服务框架(SpringBoot+Dubbo+Docker+Jenkins)......
手把手0基础项目实战(一)--教你搭建一套可自动化构建的微服务框架(SpringBoot+Dubbo+Docker+Jenkins)... 原文: 手把手0基础项目实战(一)--教你搭建一套可自动化构 ...
- 0基础教你搭建一套可自动化构建的微服务框架(SpringBoot+Dubbo+Docker+Jenkins)
2019独角兽企业重金招聘Python工程师标准>>> 本文你将学到什么? 本文将以原理+实战的方式,首先对"微服务"相关的概念进行知识点扫盲,然后开始手把手教你 ...
- 常用的前端自动化构建工具gulp/grunt/fis --简介
常用的前端自动化构建工具 之前我们自动化构建将入门级别使用的 NPM Scripts自动化构建工具对于相对复杂的项目构建会比较吃力,那么我们会了解 Gulp Grunt fIS 用法基本相同:都是通过 ...
- 【Linux】三、Linux 环境基础及开发工具使用(上篇)|开发工具|编辑器-vim使用|sudo提升权限问题|编译器 - gcc/g++使用|项目自动化构建工构建工具-make/Makefile
目录 一.开发工具 二.Linux编辑器 - vim使用 2.1 vim 的基本概念 2.2 vim的基本操作 2.3 vim正常模式命令集 2.4 vim末行模式命令集 2.5 简单vim配置 2. ...
- android 乐固渠道打包,Jenkins奇技淫巧 — Python乐固,多渠道打包篇(Android自动化构建)...
Jenkins奇技淫巧 - 安装篇(mac) Jenkins奇技淫巧 - 配置篇 Jenkins奇技淫巧 - 安全篇 Jenkins奇技淫巧 - 发送邮件篇 Jenkins奇技淫巧 - 全局变量篇 J ...
最新文章
- 用 Flask 来写个轻博客 (22) — 实现博客文章的添加和编辑页面
- [WCF REST] 通过ASP.NET Output Caching实现声明式缓存
- 昨天登陆页面,无法进入后台,今天攻克了
- 力扣——整数反转(Java)
- POJ 2250 (LCS,经典输出LCS序列 dfs)
- ABAP UDO generation report
- Airflow 中文文档:用Dask扩展
- [个人原创]关于java中对象排序的一些探讨(一)
- 【快速高斯模糊的实现】
- 极速office(excel)根据身份证号如何提取年龄
- python右对齐输出乘法表_python打印输出九九乘法表
- 2019年西工大附中分校民办小升初电脑随机派位录取结果
- CMD命令行简单学习总结
- 一招解决A卡下载安卓模拟器问题
- win10切换输入法快捷键_软件快捷键失灵,可能是你没有安装美式键盘
- 对JRTPLIB的学习
- 【拜小白opencv】45-二维H-S直方图绘制----calcHist()函数、minMaxLoc()函数
- ubuntu先anaconda中python3与ros共存时opencv报错
- 触觉是怎么产生的?清华大学破解诺奖成果未解之谜,登上Nature
- 【数值溢出】从二进制的角度看数值溢出
热门文章
- MVC 之 Partial View 用法
- delphi 7 学习步骤
- 修炼九阴真经Windows Phone开发 (7):本地化应用程序栏Localizing an Application Bar 下...
- 如何通过 .NETCore 获取 Linux,Mac 的硬件信息?
- 【干货】单日10亿GMV的.NET5电商平台,是如何设计的?
- 单元测试(二)基本使用争议篇
- 巧用Environment.UserInteractive 实现开发和生产环境的分开调试部署
- ASP.NET Core 单元测试:如何 Mock HttpContext.Features.Get()
- Magicodes.IE.AspNetCore之一行代码多格式导出
- Redis 通过 RDB 方式进行数据备份与还原