`

C#Make自动化构建-简介

    博客分类:
  • C#
 
阅读更多

. 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 task
20 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

分享到:
评论

相关推荐

    cake:Cake(C#Make)是一个跨平台的构建自动化系统

    蛋糕 Cake(C#Make)是具有C#DSL的构建自动化系统,用于执行诸如编译代码,复制文件/文件夹,运行单元测试,压缩文件以及构建NuGet包之类的事情。持续集成构建服务器平台建造状态整合测试Azure管道苹果系统 Azure...

    前端开源库-barteh-aspnet-make

    Barteh Aspnet Make可能是为了补充和增强ASP.NET的默认功能,特别是针对前端开发的部分,可能包括自动化构建、打包、压缩、模块化和其他性能优化功能。 在前端开发中,构建工具通常扮演着关键角色,它们可以帮助...

    c#开发十大工具介绍

    本文主要介绍了十个针对C#和.NET框架的高效工具,涵盖了测试、文档生成、自动化构建、代码生成、代码质量检查、正则表达式测试等多个方面。这些工具都是开发者在日常工作中可能会用到的实用工具,下面对它们进行详细...

    Selenium学习文档

    Ant是一个Java编写的自动化构建工具,它可以帮助我们自动化构建流程,包括编译、打包等操作,使得整个开发流程更加高效。将Ant与Selenium结合,可以有效地管理测试脚本的构建和执行过程,使其自动化。 TestNG是一个...

    Makeについて知っておくべき7つのこと _ インフラ・ミドルウェア _ POSTD1

    Make是用于自动化构建软件项目的工具,它允许程序员定义一系列规则来编译、链接和其他方式处理文件。这篇文章介绍了关于Make应该了解的7个关键点,对于编程人员来说,掌握这些知识将有助于提高工作效率并避免常见...

    cmake-3.11.0-rc3-win64-x64

    CMake是一个开源、跨平台的自动化构建系统,用于管理软件构建过程。它的设计目标是简化构建过程,并且能够处理各种不同的编译器和构建工具。CMake并不直接执行构建,而是生成特定构建工具(如Visual Studio,...

    cmake-3.7.0-Linux-x86_64.tar.gz

    CMake是一款跨平台的自动化构建系统,用于管理软件构建过程。CMake不是直接构建软件,而是生成特定构建工具(如Make、Ninja或Visual Studio)的项目文件,从而简化了多平台开发。CMake的配置文件是用一种名为CMake...

    smacadu_C#_tool_

    通过运行Make命令,可以自动化编译过程。 综上所述,"smacadu_C#_tool_"是一个利用C#语言开发,借助C语言编写的底层库,实现了与智能卡读卡器交互并处理芯片卡数据的工具。它的功能包括读取卡片数据、数字签名等,...

    《Visual C# 2005 程序开发与界面设计秘诀》第四章

    9. **项目管理**:由于标签中提到了“make管理项目”,虽然Makefile主要用于C/C++项目,但可能也讨论了如何使用Visual Studio 2005的项目管理功能,如解决方案(Solution)、项目(Project)的组织以及构建配置。...

    cmake-3.12.0.tar

    CMake是一款跨平台的自动化构建系统,用于管理软件构建过程。它通过提供一套高级的构建工具,使得开发者能够在不同的编译器和操作系统上构建项目,而无需修改构建脚本。CMake并不直接进行编译和链接,而是生成针对...

    cmake-3.17.4.tar.gz

    CMake是一款跨平台的自动化构建系统,用于管理软件构建过程。CMake并不直接构建软件,而是生成特定构建工具(如Makefile或Visual Studio项目)所需的配置文件,这些工具随后会执行实际的构建工作。CMake的灵活性使得...

    makerar.rar

    【标题】"makerar.rar" 是一个C# WinForm应用程序,用于实现自动将特定文件夹压缩为RAR格式的文件,...用户只需设置好参数,无需手动操作,即可实现自动化的文件夹备份,极大地提高了工作效率并降低了数据丢失的风险。

    ant-antlr-1.7.0.jar.zip

    首先,Ant是一个由Apache软件基金会维护的Java项目,它是一个基于XML的构建工具,广泛用于Java项目的自动化构建过程。Ant的工作原理类似于Make,但它更加面向Java环境,提供了一种跨平台的方式来编译、测试和打包...

    CMake Practice.zip

    - CMake与持续集成工具(如Jenkins、Travis CI或GitHub Actions)配合良好,简化自动化测试和部署。 通过深入学习和实践"CMake Practice.pdf"中的内容,初学者可以逐步掌握CMake的基本用法和技巧,为构建复杂的多...

    C#3.0新特性 NET2.0基础上进行了改进

    C# 3.0 是一种面向对象的编程语言,它为开发人员提供了一种简洁、高效的方式来构建应用程序。随着 .NET 框架的发展,C# 3.0 在 .NET 2.0 基础上引入了一系列新功能,旨在简化代码编写过程,并提高程序的可读性和维护...

    cake.example-master.zip

    标题 "cake.example-master.zip" 暗示这是一个与"Cake"相关的项目,可能是使用了名为"Cake"的构建自动化工具的示例项目。"master"通常指的是Git仓库的主要分支,表明这是项目的主线版本。结合描述 "cake demo CI/CD...

    cmake安装包

    CMake全称为“cross platform make”,是一个开源的跨平台自动化构建系统。使用指定名为CMakeLists.txt的配置文件可以控制软件的构建、测试和打包等流程。同时,通过编写平台无关的CMakeLists.txt文件和需要简单的...

    install-sqlite-autoconf-3360000_en.tar.gz

    "install-sqlite.sh"是一个shell脚本,它的作用是自动化SQLite的编译和安装过程。执行这个脚本,系统会自动完成以下步骤: 1. 解压sqlite-autoconf-3360000.tar.gz 2. 进入解压后的目录 3. 配置构建环境(如`./...

    armv7交叉编译node.zip

    C#标签可能表明了开发者可能在使用.NET框架或者Mono工具链进行跨平台开发,尽管这与Node.js的JavaScript本质不直接相关,但可能在构建自动化脚本或工具时用到。 交叉编译Node.js涉及以下几个关键步骤: 1. **配置...

Global site tag (gtag.js) - Google Analytics