Cake 构建工具在 v4.0.0 中更新至 .NET 8

Cake 4.0.0 版本更新概述

Cake 是一个开源的 .NET 构建自动化系统,使用完整的 C# DSL(领域特定语言)。2023 年 11 月 18 日,Cake 更新至 4.0.0 版本,与 .NET 8 的发布同步。新版本完全支持最新的 .NET 运行时。除了出于安全原因进行的依赖项更新外,仅添加了两个次要功能。

新功能

  1. 解压缩操作支持覆盖现有目标文件
    这一功能与 .NET 标准 ZIP 操作中覆盖标志的可见性更新保持一致。
  2. 文件时间戳操作
    现在可以在 Cake 脚本中操作文件时间戳,例如更改文件创建时间或最后访问时间。

Cake 简介

Cake 是一个基于 .NET 原生 Roslyn 编译器的构建系统,其作用类似于 JavaScript 生态系统中的 Gulp runner。它基于任务及任务之间的依赖关系,开发者可以通过传递目标任务来调用 Cake 构建脚本。

Cake 脚本示例

一个简单的 Cake 脚本包含调用不同构建和发布相关库及工具的任务。以下示例脚本运行三个任务:Clean、Build 和 Test,其中 Test 是默认任务。

var target = Argument("target", "Test");
var configuration = Argument("configuration", "Release");
Task("Clean")
    .WithCriteria(c => HasArgument("rebuild"))
    .Does(() =>
{
    CleanDirectory($"./src/Example/bin/{configuration}");
});
Task("Build")
    .IsDependentOn("Clean")
    .Does(() =>
{
    DotNetBuild("./src/Example.sln", new DotNetBuildSettings
    {
        Configuration = configuration,
    });
});
Task("Test")
    .IsDependentOn("Build")
    .Does(() =>
{
    DotNetTest("./src/Example.sln", new DotNetTestSettings
    {
        Configuration = configuration,
        NoBuild = true,
    });
});
RunTarget(target);

执行此脚本(通过命令行输入 dotnet cake)将运行 Test 任务。由于任务间的依赖关系,执行顺序为 Clean、Build 和 Test。CleanDirectoryDotNetBuildDotNetTest 是调用原生 .NET 工具进行清理、构建和运行测试的方法。

使用 Cake 的优势

Reddit 用户 'devlead' 总结了使用 Cake 的优势:

  • 可重复性:如果构建和发布过程包含多个步骤,Cake 可以以可重复的方式在完整的编程语言(C#)中声明这些步骤。
  • 跨平台和环境:Cake 可以在 Linux、MacOS 和 Windows 上运行,无论是本地环境还是构建/发布服务器。
  • 本地测试和调试:使用 C# 编写的脚本可以在本地测试和调试,反馈循环更快,避免了使用 YAML 文件时提交到 Git 并等待 CI 启动的延迟。
  • 利用现有技能:对于 .NET 团队,使用 C# 可以利用现有技能,处理条件语句和字符串等操作比声明性语言(如 YAML)更简单。
  • 一致性/可移植性:Cake 在不同供应商/服务之间保持一致和可移植,而 YAML 没有标准。

Cake 的开源与流行度

Cake 作为开源项目发布在 GitHub 上,拥有超过 200 名贡献者。根据 NuGet 包管理器的统计数据,新版本的每日下载量超过 35,000 次,使 Cake 成为最受欢迎的 .NET 库之一。

阅读 74
0 条评论