- 桌面应用
- 屏幕录制
- 音视频
【免费下载链接】Captura
Capture Screen, Audio, Cursor, Mouse Clicks and Keystrokes
本指南系统讲解 Captura 项目中以 build.cake 为核心的 Cake 自动化构建体系:如何安装 Cake 工具、如何运行构建脚本、如何使用build_version/configuration/target三个命令行参数控制构建行为,并结合scripts/目录下的源码(constants.cake、version.cake、backup.cake、apikeys.cake、choco.cake)与 appveyor.yml CI 配置,讲解版本号注入、任务依赖链与产物打包的底层原理。读完本文,你将能够独立完成 Captura 的本地构建、便携版/安装包/Chocolatey 包打包,并理解其与 CI 的协作方式。
Cake 在 Captura 中的作用
Cake(C# Make)是一个基于 C# 的跨平台构建自动化系统,构建脚本本身以 C# 编写。Captura 仓库根目录下的 build.cake 是整套构建流程的入口,它通过#l指令引用了scripts/目录下的五个辅助模块:
| 脚本文件 | 职责 |
|---|---|
| scripts/constants.cake | 定义源目录、临时目录、输出目录、解决方案路径等全局常量 |
| scripts/backup.cake | 提供文件备份与恢复机制(CreateBackup/RestoreBackups) |
| scripts/version.cake | 解析build_version参数并更新AssemblyInfo.cs |
| scripts/apikeys.cake | 从环境变量读取并嵌入 Imgur / YouTube API 密钥 |
| scripts/choco.cake | 打包 Chocolatey 安装包 |
其中 scripts/constants.cake 定义了整个构建过程的关键路径常量:src(源代码目录)、temp(临时目录)、dist(输出目录)、licenses、choco,以及解决方案文件 src/Captura.sln、便携包temp/Captura-Portable.zip和安装包temp/Captura-Setup.exe。
安装 Cake
在运行构建脚本之前,需要先安装 Cake 工具。Captura 的构建文档明确要求.NET Core 2.1及以上版本,然后通过 .NET 全局工具方式安装指定版本的 Cake.Tool:
dotnet tool install -g Cake.Tool --version 0.32.1该命令将 Cake.Tool 以全局工具形式安装,安装完成后即可在任意目录直接调用dotnet-cake命令。作为佐证,CI 配置 appveyor.yml 的install阶段也执行了完全相同的命令(dotnet tool install -g Cake.Tool --version 0.32.1),说明0.32.1是项目锁定并经过 CI 验证的版本。
运行构建脚本
安装完成后,在仓库根目录直接执行:
dotnet-cake不带任何参数时,dotnet-cake会加载当前目录下的build.cake并运行默认目标(default target)。从 build.cake 的源码可以看到,默认目标Default依次依赖Pack-Portable、Pack-Setup、Pack-Choco三个任务,也就是说一次无参数运行会完成便携版、安装版和 Chocolatey 包的完整打包流程。
构建脚本中的任务(Target)体系
build.cake 中定义了以下任务,这也是--target参数可选值的完整集合:
| Task 名称 | 依赖关系 | 行为 |
|---|---|---|
Build | 无 | 用 MSBuild 以指定 Configuration 对解决方案执行Rebuild+Restore,使用 VS2019 工具链 |
Clean-Output | 无 | 清空dist输出目录 |
Populate-Output | Clean-Output、Build | 调用PopulateOutput()组装发布目录(见下文) |
Pack-Portable | Populate-Output | 调用PackPortable()生成便携版 ZIP 并补齐Settings、Codecs目录 |
Pack-Setup | Populate-Output | 用 Inno Setup 编译 Inno.iss,并以/DMyAppVersion注入版本号 |
Pack-Choco | Pack-Portable | 调用PackChoco()生成 Chocolatey 的 nupkg |
Test | Build | 用 xUnit runner 运行 src/Tests/ 编译出的Captura.Tests.dll |
Default | Pack-Portable、Pack-Setup、Pack-Choco | 本地默认构建入口 |
CI | Test、Pack-Portable、Pack-Setup、Pack-Choco | 持续集成入口(相比Default额外执行测试) |
从依赖链可以看出,任务之间是流水线式的递进关系:Clean-Output→Build→Populate-Output→Pack-Portable/Pack-Setup,而Pack-Choco又依赖便携包产物,CI则在最顶层串起"测试 + 全部打包"。
PopulateOutput:发布目录的组装逻辑
PopulateOutput()函数(build.cake)负责把构建产物组装到dist目录:
- 复制
licenses目录(开源许可证文件); - 从
Captura.Console/bin/<Configuration>与Captura/bin/<Configuration>复制可执行文件(*.exe*); - 复制界面程序中的
Languages(本地化语言包)与keymaps(键盘映射)目录; - Release 构建:复制
lib依赖目录; - Debug 构建:额外复制所有
.dll、.pdb、.xml文件(便于调试)。
随后PackPortable()会创建Settings与Codecs两个空目录(对应便携版行为,详见 docs/Portable.md),将整个dist压缩为temp/Captura-Portable.zip,再清理这两个目录。
命令行参数详解
build.cake 顶部通过Argument声明了两个内建参数,而版本参数则在 scripts/version.cake 中读取。三个参数的完整说明如下:
| 参数 | 说明 | 示例 |
|---|---|---|
build_version | 构建版本号。稳定版/CI 构建形如v9.0.0,预发布版形如v9.0.0-beta3。构建过程中会依据该值更新AssemblyInfo.cs | --build_version=v9.0.0 |
configuration | 构建配置:Release或Debug,默认Release | --configuration=Release |
target | 要运行的构建任务,取值见上文任务表(见 build.cake) | --target=CI |
标准用法示例:
dotnet-cake --target=CI --configuration=Releasebuild_version:版本号解析与 AssemblyInfo 注入
build_version是三个参数中逻辑最复杂的一个,其处理实现在 scripts/version.cake:
- 首先通过
Argument<string>("build_version", "v0.0.0")读取参数,缺省值为v0.0.0(该脚本注释说明version参数名已被 cake.exe 自身占用,因此这里命名为build_version); - 用两个正则校验格式:
- 稳定版:
^v\d+\.\d+\.\d+$,匹配后去掉开头的v(v9.0.0→9.0.0); - 预发布版:
^v\d+\.\d+\.\d+-[^\s]+$,匹配后取-之前的部分再去掉v(v9.0.0-beta3→9.0.0); - 两者都不匹配则抛出
ArgumentException("Invalid Version Format", "build_version"),直接终止构建;
- 稳定版:
- 对
src/Captura/Properties/AssemblyInfo.cs与src/Captura.Console/Properties/AssemblyInfo.cs两个文件执行UpdateVersion()——先用CreateBackup备份到temp目录,再通过正则定位AssemblyVersion(...)属性并替换为解析后的版本号。
因此构建完成后,程序集版本号(如当前仓库中默认的AssemblyVersion("0.0.0"),见 src/Captura/Properties/AssemblyInfo.cs)会被动态改写为build_version对应的正式版本号。同时 scripts/backup.cake 的Teardown机制保证:无论构建成功与否,脚本结束时都会把备份文件恢复回去,避免源仓库中的AssemblyInfo.cs被永久污染。
configuration:Release 与 Debug 的行为差异
configuration参数(默认Release)不仅传给 MSBuild 控制编译配置,还直接影响构建脚本本身的逻辑分支:
PopulateOutput的差异:Debug 构建复制全部.dll/.pdb/.xml文件,Release 构建只复制lib目录(build.cake);- API 密钥嵌入:
Setup阶段会判断if (configuration == Release),仅 Release 构建执行EmbedApiKeys()(build.cake)。
EmbedApiKeys()(scripts/apikeys.cake)的原理是:用正则Get\("(.*)"\)扫描 src/Captura.Core/ApiKeys.cs,收集所有形如Get("xxx")的占位调用,然后检查同名环境变量是否存在,存在则把占位符替换为环境变量中的真实值。这解释了 docs/Build.md 中"开发期从环境变量读取、生产构建嵌入应用"的设计:对应环境变量为imgur_client_id、yt_client_id、yt_client_secret(分别对应 Imgur 与 YouTube 上传功能,仅在需要相应上传能力时才必须提供)。
与 CI 的集成方式
appveyor.yml 展示了 Cake 脚本在持续集成中的真实调用方式:
- CI 镜像固定为
Visual Studio 2019,install阶段安装 Cake.Tool 与 Inno Setup; build_script阶段根据是否为 tag 构建决定版本号:tag 构建直接使用 tag 名作为build_version(如v9.0.0),非 tag 构建则生成v0.0.<构建号>形式的版本号;- 无论哪种情况,最终都执行
dotnet-cake --target=CI --configuration=<配置> --build_version=<版本>; - 构建产物(
temp/Captura-Portable.zip、temp/Captura-Setup.exe、temp/captura.*.nupkg)被收集为 artifacts,Release + tag 构建时自动部署到 GitHub Releases 与 Chocolatey(对应 choco/captura.nuspec 与 scripts/choco.cake 中基于便携包哈希计算校验和并写入tools/chocolateyinstall.ps1的打包逻辑)。
关于本地构建的前置条件(Visual Studio 2019 及 .NET 桌面开发工作负载、.NET Core 2.1+、FFmpeg 下载等),可进一步参考 docs/Build.md;CI 构建与 dev build 获取方式见 docs/CI.md。
小结
Captura 的 Cake 构建体系将"编译、测试、组装发布目录、打包便携版/安装包/Chocolatey 包"整合为一条清晰的任务流水线。日常使用只需记住三个要点:用dotnet tool install -g Cake.Tool --version 0.32.1安装工具、在仓库根目录执行dotnet-cake、按需通过--build_version/--configuration/--target控制版本号、构建配置与目标任务。若要深入理解每个环节,build.cake 与scripts/目录下的五个.cake模块即是完整的源码级参考。
- 桌面应用
- 屏幕录制
- 音视频
【免费下载链接】Captura
Capture Screen, Audio, Cursor, Mouse Clicks and Keystrokes
相关推荐
Captura命令行脚本参数完全指南:5大动词与高级选项详解
Captura命令行脚本参数完全指南:5大动词与高级选项详解 Captura是一款功能强大的屏幕捕获工具,支持屏幕录制、音频捕捉、鼠标点击和键盘按键记录等多种功
桌面应用屏幕录制音视频Captura命令行API文档:参数说明与示例脚本
Captura命令行API文档:参数说明与示例脚本 1. 概述 Captura命令行工具( captura cli )提供屏幕录制、截图、系统信息查询等功能,支
桌面应用屏幕录制音视频Minimal Startpage配置详解:从基础设置到高级自定义
Minimal Startpage配置详解:从基础设置到高级自定义 Minimal Startpage是一款轻量级的浏览器起始页工具,专为Chrome和Fire
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考