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

介绍

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生态圈越来越好!

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

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

相关文章

PS实现分幅扫描图片的批量自动拼接

很简单&#xff0c;只需两步搞定&#xff1a; 一、打开工具&#xff0c;如图所示&#xff1a; 二、选择图片&#xff0c;进行拼接&#xff1a; 静待结果&#xff01;

.NET Nancy 详解(三) Respone 和 ViewEngine

我们在ASP.NET MVC中可以返回各种类型的ActionResult(以下图片来自于园友--待补。。) 在Nancy 中本着简单粗暴的原则&#xff0c;使用方式略有不同。这期我们使用的版本是Nancy的第一个tag version 0.0.2.0。 public MainModule(IRouteCacheProvider routeCacheProvider){Get[&…

Android之修改app名字客户需要升级需要注意的问题

1、问题 客户改了app的名字&#xff0c;在服务端替换了新的apk&#xff0c;然后下次升级更新的之前的apk. 2、总结 1、如果涉及到修改app的桌面名字的定制&#xff0c;如果客户要求从浏览器下载的的apk名字也要修改的话&#xff0c;我们会把这个新的apk放到linux 服务端&…

(转)Akka学习笔记

Akka学习笔记系列文章&#xff1a;  《Akka学习笔记&#xff1a;ACTORS介绍》  《Akka学习笔记&#xff1a;Actor消息传递(1)》  《Akka学习笔记&#xff1a;Actor消息传递(2)》    《Akka学习笔记&#xff1a;日志》  《Akka学习笔记&#xff1a;测试Actors》  …

resque java_php-resque :基于Redis的后台任务系统

为什么使用php-resque?php-resque 是轻量级后台任务系统&#xff0c;基于Redis&#xff0c;功能设计简单&#xff0c;配置灵活。相比MQ系统大而全的MQ系统&#xff0c;这个显得小而美。php-resque 角色划分Job 定义任务&#xff0c;是负责具体的业务逻辑。Queue 队列&#xff…

【.NET 日常开发技巧】一个性能强悍的HttpClient 库

微信公众号&#xff1a;趣编程ACE关注可了解更多的.NET日常实战开发技巧&#xff0c;如需源码请公众号留言源码即可;源码如下&#xff1a;1// See https://aka.ms/new-console-template for more information2using Flurl;3using Flurl.Http;45Console.WriteLine("Hello, …

javascript中Date对象的初始化方法

为什么80%的码农都做不了架构师&#xff1f;>>> 在前端代码中难免会涉及到时间的操作&#xff0c;如何构造一个Date对象呢&#xff1f;javascript为我们提供如下几种方式&#xff1a; new Date("month dd,yyyy hh:mm:ss");new Date("month dd,yyyy&…

【转】R语言 RStudio快捷键

【转】R语言 RStudio快捷键 链接地址 http://blog.sina.com.cn/s/blog_403aa80a0101ar8q.html 控制台 功能Windows & LinuxMac移动鼠标到控制台Ctrl2Ctrl2控制台清屏CtrlLCommandL移动鼠标至第一行HomeCommandLeft移动鼠标至最后一行EndCommandRight历史记录翻滚Up/DownUp…

贪心算法之哈夫曼编码问题

1、问题 通常的编码方法有固定长度编码和不等长度编码两种。这是一个设计最优编码方案的问 题,目的是使总码长度最短。这个问题利用字符的使用频率来编码,是不等长编码方法,使 得经常使用的字符编码较短,不常使用的字符编码较长。如果采用等长的编码方案,假设所 有字符的编码都…

决心书

决心书 我是来自山西的一只老山羊&#xff0c;我叫杨洋。从大学毕业后&#xff0c;从事教育行业&#xff0c;也回山西老家坐过一段办公室。每天除了发呆一无是处&#xff0c;总觉得自己需要改变着什么。虽然做不到为天地立心&#xff0c;为众生立命。能为自己立命也是好的。所以…

java id主键_JAVA主键ID生成工具类:改自twitter的分布式ID算法snowflake

祝大家新年快乐&#xff0c;有任何问题可与我联系&#xff1a;关于snowflake算法的介绍和原理这里不过多说明了&#xff0c;网上有很多。这里简单描述下SnowflakeUtil的优点&#xff1a;1、做为底层工具使用&#xff0c;可用于数据库主键、订单编号……2、不依赖数据库&#xf…

云上“炼”码兵器 GitHub Codespaces

GitHub 是全球最受欢迎的开发者平台&#xff0c; ⾃从微软收购了 GitHub 后&#xff0c; GitHub 的功能就越来越强⼤&#xff0c;除了原有的代码管理外&#xff0c;也增加了很多硬货&#xff0c;这就包括了集成 CI/CD 的 GitHub Actions &#xff0c;以及完善的项⽬管理功能&am…

python 中的yum pip

为什么80%的码农都做不了架构师&#xff1f;>>> python 中的yum pip pip 可以管理python中的模块&#xff0c;之于python就像yum之于redhat 转载于:https://my.oschina.net/sskxyz/blog/368099

Hello, AnnsShadow!

Hello&#xff01; 发现这个神奇的园子快一年了&#xff0c;自己的学习历程磕磕碰碰也过了一年了&#xff0c;想想&#xff0c;这么久了&#xff0c;是时候做些记录做个分享者了。 从一开始的只敢看Blog&#xff0c;到现在自己发表一下自己的所感所想&#xff0c;算是一种成长了…

ArcGIS怎样获取重分类后各类所占的像元个数

【问题描述】如下图所示,给西北地区2007年平均NDVI分等级,求各个等级的面积所占百分比? 解决方法: 刚开始老在如下图所示的Properties界面中进行重分类,虽然能得到分类结果,但是却得不到像元个数,因为是连续的,也不会有属性表生成: 后来发现,工具箱中还有个分类工具…

Linux c之函数手册

Linux c函数手册查阅地址 http://man.chinaunix.net/develop/c&c/linux_c/default.htm

13.ThreadPoolExecutor线程池之submit方法

jdk1.7.0_79 在上一篇《ThreadPoolExecutor线程池原理及其execute方法》中提到了线程池ThreadPoolExecutor的原理以及它的execute方法。本文解析ThreadPoolExecutor#submit。 对于一个任务的执行有时我们不需要它返回结果&#xff0c;但是有我们需要它的返回执行结果。对于线程…

java idea 模块_idea 多模块项目依赖父工程class找不到问题的方法

比如&#xff0c;我们有这么个过程&#xff0c;项目结构如下&#xff1a;a--b--ca是总结点&#xff0c;b是子节点&#xff0c;c是父节点b依赖父节点class&#xff0c;通过maven构建时通常我们会在子节点中添加父节点依赖&#xff0c;如&#xff1a;com.xxxc${project.version}虽…

关于OAuth2.0 Authorization Code+PKCE flow在原生客户端(Native App)下集成的思考

Working with Proof Key for Code Exchange (PKCE) - DEV Community写在前面前几天看了园友的一篇文章被广泛使用的OAuth2.0的密码模式已经废了&#xff0c;放弃吧 被再次提起&#xff1a;Implicit Flow Password Grant&#xff0c;均已被标记为Legacy&#xff0c;且OAuth2.1里…

详细类库排行榜网址

https://github.com/search?lObjective-C&qstars%3A%3E1&refsearchresults&typeRepositories 转载于:https://www.cnblogs.com/hsxblog/p/4953572.html