介绍

Cake (C# Make) 是一个带有 C# DSL 的构建自动化系统,用于执行编译代码、复制文件/文件夹、运行单元测试、压缩文件和构建 NuGet 包等操作。

地址

https://cakebuild.net/docs

构建

本教程使用Cake Frosting,它允许您将构建编写为标准控制台应用程序作为解决方案的一部分。有关如何运行 Cake 构建的其他可能性。

以下说明需要在 .NET Core 3.1.301 或更高版本上运行 Cake Frosting 1.0.0 或更高版本。您可以在https://dotnet.microsoft.com/download找到 .NET SDK

要创建一个新的Cake Frosting项目,您需要安装 Frosting 模板:

dotnet new --install Cake.Frosting.Template

创建一个新的 Frosting 项目:

dotnet new cakefrosting

这将创建 Cake Frosting 项目和引导脚本。

初始构建项目

该类Program包含配置和运行 Cake 的代码:

public static class Program
{public static int Main(string[] args){return new CakeHost().UseContext<BuildContext>().Run(args);}
}

该类BuildContext可用于添加其他自定义属性。Delay默认模板包含一个可以通过参数设置的示例属性--delay。您可以删除此属性并根据您的特定需求自定义属性。

public class BuildContext : FrostingContext
{public bool Delay { get; set; }public BuildContext(ICakeContext context): base(context){Delay = context.Arguments.HasArgument("delay");}
}

该文件还包含三个任务类:

[TaskName("Hello")]
public sealed class HelloTask : FrostingTask<BuildContext>
{public override void Run(BuildContext context){context.Log.Information("Hello");}
}[TaskName("World")]
[IsDependentOn(typeof(HelloTask))]
public sealed class WorldTask : AsyncFrostingTask<BuildContext>
{// Tasks can be asynchronouspublic override async Task RunAsync(BuildContext context){if (context.Delay){context.Log.Information("Waiting...");await Task.Delay(1500);}context.Log.Information("World");}
}[TaskName("Default")]
[IsDependentOn(typeof(WorldTask))]
public class DefaultTask : FrostingTask
{
}

Default任务对World有依赖性。该World任务是一个异步任务Delay,如果设置了属性,则等待一秒半。

示例构建管道

以下示例创建了一个简单的构建管道,其中包含一个任务、一个编译 MsBuild 解决方案的任务和一个测试解决方案的任务。

以下示例需要Visual Studio 解决方案的存储库根文件夹中的src/Example.s中。

添加所需的 using 语句:

using Cake.Common;
using Cake.Common.IO;
using Cake.Common.Tools.DotNet;
using Cake.Common.Tools.DotNet.Build;
using Cake.Common.Tools.DotNet.Test;

从类中删除Delay属性BuildContext并添加一个属性MsBuildConfiguration,它存储应该构建的解决方案的配置:

public class BuildContext : FrostingContext
{public string MsBuildConfiguration { get; set; }public BuildContext(ICakeContext context): base(context){MsBuildConfiguration = context.Argument("configuration", "Release");}
}

HelloTaskWorldTask可以删除。

CleanTask为清理目录的任务创建一个新类:

[TaskName("Clean")]
public sealed class CleanTask : FrostingTask<BuildContext>
{public override void Run(BuildContext context){context.CleanDirectory($"../src/Example/bin/{context.MsBuildConfiguration}");}
}

创建一个BuildTask用于构建解决方案的新类:

[TaskName("Build")]
[IsDependentOn(typeof(CleanTask))]
public sealed class BuildTask : FrostingTask<BuildContext>
{public override void Run(BuildContext context)
{context.DotNetBuild("../src/Example.sln", new DotNetBuildSettings{Configuration = context.MsBuildConfiguration,});}
}

创建一个TestTask用于测试解决方案的新类:

[TaskName("Test")]
[IsDependentOn(typeof(BuildTask))]
public sealed class TestTask : FrostingTask<BuildContext>
{public override void Run(BuildContext context)
{context.DotNetTest("../src/Example.sln", new DotNetTestSettings{Configuration = context.MsBuildConfiguration,NoBuild = true,});}
}

更新DefaultTask类以调用新任务:

[IsDependentOn(typeof(TestTask))]
public sealed class Default : FrostingTask
{
}

运行构建脚本

运行构建脚本

./build.ps1

更多文档请前往cake-build官网。

最后大家如果喜欢我的文章,还麻烦给个关注, 希望net生态圈越来越好!

cake-build -.Net Core 跨平台构建自动化系统。相关推荐

  1. cake-build -.Net Core 跨平台构建自动化系统

    介绍 Cake (C# Make) 是一个带有 C# DSL 的构建自动化系统,用于执行编译代码.复制文件/文件夹.运行单元测试.压缩文件和构建 NuGet 包等操作. 地址 https://cake ...

  2. .Net Core跨平台应用研究-HelloArm(串口篇)

    引言 为了验证采用dotnet core技术开发的物联网设备数据采集接入服务应用是否能在高性价比的linux嵌入式平台运行,针对dotnet core应用程序进行嵌入式linux环境的发布部署运行验证 ...

  3. .NET Core跨平台的奥秘[上篇]:历史的枷锁

    微软推出的第一个版本的.NET Framework是一个面向Windows桌面和服务器的基础框架,在此之后,为此微软根据设备自身的需求对.NET Framework进行裁剪,不断推出了针对具体设备类型 ...

  4. 当我们在谈 .NET Core 跨平台时,我们在谈些什么?--学习笔记

    摘要 .NET Framework在过去十多年在跨平台上的尝试. .NET Core跨平台的实现有何不同? 基于 .NET Standard的平台兼容性是如何实现的? 讲师介绍 历史枷锁 .NET F ...

  5. 小白开学Asp.Net Core 《六》 —— 探究.Net Core 跨平台的奥秘

    1.写这篇文章的初衷 有好多朋友反馈看不懂我写的开源的一个练手项目(GitHub:https://github.com/AjuPrince/Aju.Carefree)也有好多人都希望我能写一些简单的入 ...

  6. .NET Core跨平台:使用.NET Core开发一个初心源商城总括

    1..NET Core基本介绍 a 作为一个.NET的开发者,在以前的开发中,我们开发的项目基本都是部署在windows服务器上,但是在windows服务器上的话某些比较流行的解决访问量的方案基本都是 ...

  7. .NET Core跨平台部署

    .NET Core跨平台部署 原文:.NET Core跨平台部署 .NET Core跨平台部署 1. Windows-IIS 大家对于在IIS上部署.NET站点已经驾轻就熟了,部署.NET Core也 ...

  8. ASP.NET Core WebApi构建API接口服务实战演练

    一.ASP.NET Core WebApi课程介绍 人生苦短,我用.NET Core!提到Api接口,一般会想到以前用到的WebService和WCF服务,这三个技术都是用来创建服务接口,只不过Web ...

  9. asp编程工具_asp.net core 成为构建企业首选

    微软开发了跨平台和开放源代码框架ASP.NET Core,用于构建现代的,基于云的和Internet连接的应用程序.它旨在使运行时组件,API,编译器和语言能够快速发展,并在.NET Core或.NE ...

最新文章

  1. Jenkins进阶系列之——04Publish Over FTP Plugin插件
  2. 轻量级Web渗透测试工具jSQL
  3. maven报错找不到依赖
  4. concurrent(四)Condition
  5. 【2019南昌邀请赛现场赛 - J】Prefix(STLmap,思维)
  6. html页面返回json数据为空,在Html页面中,展示出Json格式数据,且保持缩进格式...
  7. webpack插件实现自动抽取css中的主题色样式,并动态切换主题色(element-ui)
  8. 10.Shell 编程从入门到精通 --- 超级工具(shell,ssh,screen,vim)
  9. atitit 需求条目的自动化生成原型html h5界面ui与解决方案
  10. python控制安捷伦频谱仪_通过 python 对罗德施瓦茨矢网、信号源、频谱仪的控制...
  11. ClientToScreen 和ScreenToClient
  12. 因果法制体系轮回框架的崛起
  13. C语言之switch语句用法
  14. 什么是 CDN 边缘服务器 - Edge Server
  15. 移动硬盘与电脑连接后 计算机中找不到,移动硬盘连接电脑后不显示盘符怎么办...
  16. 苹果鼠标怎么连接_用手机连接鼠标和键盘的方法(安卓和苹果都可以)
  17. 单模光纤VS多模光纤
  18. openlayer+虚线、实线
  19. 实用解析dmp文件内容
  20. 学习 《模型思维》-斯科特·佩奇 笔记 9.27

热门文章

  1. Redis 集合处理
  2. 实现ModelDriver接口的功能(转)
  3. 视频播放器for android
  4. RAID 01 和RAID 10的区别
  5. 得到时间字符串|程序当前的目录
  6. 将 iOS 应用的体积控制在 20MB 以内对于其下载量有很明显的影响吗?
  7. 【视频】CCNA——telnet和SSH的配置
  8. css超出隐藏显示省略号
  9. 一位面试者提到直接调用vuex中mutations方法
  10. Android工程中javax annotation Nullable找不到的替代方案