Cake(C#Make)是一个跨平台的构建自动化系统,它使用.NET的Roslyn编译器作为服务,允许开发者使用熟悉的C#语言编写精确的构建脚本。
Cake是一个构建工具,它使用Roslyn编译器(编译器即服务)来执行C#脚本。这意味着可以使用C#语言编写构建脚本,这使得构建过程更加灵活和强大。
要开始使用Cake,最好的方式是克隆示例仓库:
https://github.com/cake-build/example
这个仓库包含了一个简单的C#类库和一个测试项目,它们都在同一个解决方案中。目标是使用Cake完成以下任务:
示例仓库已经包含了大部分功能,除了推送NuGet包。
要运行Cake构建,只需要以下两个文件:
build.ps1
(引导脚本,不会改变,可以从上面的示例仓库中获取)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);
]]>
这里有几个概念需要指出:
有了这个build.cake
和build.ps1
(引导文件)在手,就可以运行构建了。这里是如何做到的:
Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass
.cake
文件的正确目录,并执行此命令:.\build.ps1
应该看到一些输出,最终会完成。也应该看到一个tools
文件夹。这是蛋糕构建创建的。
提到过还想能够部署一个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发布任务,如下所示:
Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass
.\build.ps1 -Target Package