探索Cake构建工具

Cake(C#Make)是一个跨平台的构建自动化系统,它使用.NET的Roslyn编译器作为服务,允许开发者使用熟悉的C#语言编写精确的构建脚本。

Cake是什么?

Cake是一个构建工具,它使用Roslyn编译器(编译器即服务)来执行C#脚本。这意味着可以使用C#语言编写构建脚本,这使得构建过程更加灵活和强大。

开始使用Cake

要开始使用Cake,最好的方式是克隆示例仓库:

https://github.com/cake-build/example

这个仓库包含了一个简单的C#类库和一个测试项目,它们都在同一个解决方案中。目标是使用Cake完成以下任务:

  • 清理解决方案
  • 恢复NuGet包
  • 构建解决方案
  • 运行测试
  • 推送NuGet包(nupkg文件)

示例仓库已经包含了大部分功能,除了推送NuGet包。

运行Cake构建需要什么?

要运行Cake构建,只需要以下两个文件:

  • build.ps1(引导脚本,不会改变,可以从上面的示例仓库中获取)
  • build.cake(这是特定构建脚本,应该包含构建所需的目标/任务)

构建脚本(build.cake)

由于build.ps1是一个标准文件,不会过多关注它。现在让看看build.cake文件,它看起来像这样:

{ CleanDirectory(buildDir); }); Task("Restore-NuGet-Packages").IsDependentOn("Clean").Does(() => { NuGetRestore("./src/Example.sln"); }); Task("Build").IsDependentOn("Restore-NuGet-Packages").Does(() => { if (IsRunningOnWindows()) { // Use MSBuild MSBuild("./src/Example.sln", settings => settings.SetConfiguration(configuration)); } else { // Use XBuild XBuild("./src/Example.sln", settings => settings.SetConfiguration(configuration)); } }); Task("Run-Unit-Tests").IsDependentOn("Build").Does(() => { NUnit3("./src/**/bin/" + configuration + "/*.Tests.dll", new NUnit3Settings { NoResults = true }); }); var nugetPackageDir = Directory("./artifacts"); var nuGetPackSettings = new NuGetPackSettings { OutputDirectory = nugetPackageDir }; Task("Package").Does(() => NuGetPack("./src/Example/Example.nuspec", nuGetPackSettings)); ////////////////////////////////////////////////////////////////////// // TASK TARGETS ////////////////////////////////////////////////////////////////////// Task("Default").IsDependentOn("Run-Unit-Tests"); ////////////////////////////////////////////////////////////////////// // EXECUTION ////////////////////////////////////////////////////////////////////// RunTarget(target); ]]>

这里有几个概念需要指出:

  • 有一些顶级的参数/变量
  • 使用了之前熟悉的C#特性
  • 有任务,就像其他构建系统一样。可以使用.IsDependantOn("")来使一个任务依赖于另一个任务
  • 有广泛的内置功能可以使用,例如下面这些。这些都是cake DSL中预构建的项,可以利用它们。这里有很多这样的功能,完整的列表可以在找到:

运行构建

有了这个build.cakebuild.ps1(引导文件)在手,就可以运行构建了。这里是如何做到的:

  1. 以管理员身份打开PowerShell窗口
  2. 在PowerShell中执行此命令:Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass
  3. 切换到包含.cake文件的正确目录,并执行此命令:.\build.ps1

应该看到一些输出,最终会完成。也应该看到一个tools文件夹。这是蛋糕构建创建的。

部署Nuget包

提到过还想能够部署一个Nuget包作为Nupkg。为此,需要为Example项目创建以下.nuspec文件。

Example 1.0.0 Cake Example Sacha Barber Sacha Barber http://github.com/sachabarber http://github.com/sachabarber false Simple Cake Build Tool Example 1st and only release Copyright 2018 C# Cake ]]>

有了这个,也可以尝试build.cake文件中的Nuget发布任务,如下所示:

  1. 以管理员身份打开PowerShell窗口
  2. 在PowerShell中执行此命令:Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass
  3. 在PowerShell中执行此命令:.\build.ps1 -Target Package
沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485