cake-build -.Net Core 跨平台构建自动化系统。
介紹
Cake (C# Make) 是一個帶有 C# DSL 的構(gòu)建自動化系統(tǒng),用于執(zhí)行編譯代碼、復制文件/文件夾、運行單元測試、壓縮文件和構(gòu)建 NuGet 包等操作。
地址
https://cakebuild.net/docs
構(gòu)建
本教程使用Cake Frosting,它允許您將構(gòu)建編寫為標準控制臺應用程序作為解決方案的一部分。有關(guān)如何運行 Cake 構(gòu)建的其他可能性。
以下說明需要在 .NET Core 3.1.301 或更高版本上運行 Cake Frosting 1.0.0 或更高版本。您可以在https://dotnet.microsoft.com/download找到 .NET SDK
要創(chuàng)建一個新的Cake Frosting項目,您需要安裝 Frosting 模板:
dotnet new --install Cake.Frosting.Template創(chuàng)建一個新的 Frosting 項目:
dotnet new cakefrosting這將創(chuàng)建 Cake Frosting 項目和引導腳本。
初始構(gòu)建項目
該類Program包含配置和運行 Cake 的代碼:
public static class Program {public static int Main(string[] args){return new CakeHost().UseContext<BuildContext>().Run(args);} }該類BuildContext可用于添加其他自定義屬性。Delay默認模板包含一個可以通過參數(shù)設置的示例屬性--delay。您可以刪除此屬性并根據(jù)您的特定需求自定義屬性。
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,如果設置了屬性,則等待一秒半。
示例構(gòu)建管道
以下示例創(chuàng)建了一個簡單的構(gòu)建管道,其中包含一個任務、一個編譯 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,它存儲應該構(gòu)建的解決方案的配置:
public class BuildContext : FrostingContext {public string MsBuildConfiguration { get; set; }public BuildContext(ICakeContext context): base(context){MsBuildConfiguration = context.Argument("configuration", "Release");} }和HelloTask類WorldTask可以刪除。
CleanTask為清理目錄的任務創(chuàng)建一個新類:
[TaskName("Clean")] public sealed class CleanTask : FrostingTask<BuildContext> {public override void Run(BuildContext context){context.CleanDirectory($"../src/Example/bin/{context.MsBuildConfiguration}");} }創(chuàng)建一個BuildTask用于構(gòu)建解決方案的新類:
[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,});} }創(chuàng)建一個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類以調(diào)用新任務:
[IsDependentOn(typeof(TestTask))] public sealed class Default : FrostingTask { }運行構(gòu)建腳本
運行構(gòu)建腳本
./build.ps1
更多文檔請前往cake-build官網(wǎng)。
最后大家如果喜歡我的文章,還麻煩給個關(guān)注, 希望net生態(tài)圈越來越好!
總結(jié)
以上是生活随笔為你收集整理的cake-build -.Net Core 跨平台构建自动化系统。的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 你真的了解扩展方法吗?
- 下一篇: 【.NET 日常开发技巧】一个性能强悍的