在Cakebuild中创建任务序列

时间:2017-10-16 16:29:29

标签: c# cakebuild

我正在使用Cake 0.23.0并且很高兴看到已经扩展了任务依赖性。不幸的是,似乎即使是最新版本也无法解决我的问题。 或者我只是做错了什么?

我想要实现的目标

  • 假设我为多个平台(例如x86或x64)定义了相同的任务
  • 我想定义一个构建序列,它首先为平台x86执行所有任务。完成后,应执行init任务,只需将平台设置为x64,然后执行与x86相同的任务。
  • 示例序列: 任务初始化x86 - >任务A - >任务B - >任务C - >任务初始化x64 - >任务A - >任务B - >任务C

当前行为 得到的序列是 任务初始化x86 - >任务A - >任务B - >任务C - >任务初始化x64

似乎Cake只会尊重任务依赖性。我的定义如下所示:

Task("Compile-All-Platforms")
  .IsDependentOn("Init-86")  
  .IsDependentOn("A")
  .IsDependentOn("B")
  .IsDependentOn("C")
  .IsDependentOn("Init-x64")
  .IsDependentOn("A")
  .IsDependentOn("B")
  .IsDependentOn("C");

1 个答案:

答案 0 :(得分:1)

如果你想构建两个大步骤,那么天真的方法就是在辅助函数中封装A,B和C的构建逻辑,然后将它们包装在x86或x64任务中。这里的想法是利用Cake能够为您创建的依赖树,而不是写下Compile-All中的所有依赖项。实际上,这是您想要使用构建编排器的主要原因。

当然,这是使其适用于3个任务和2个平台的简单方法。一个更具可扩展性的解决方案是创建和添加或者一个接受"平台的帮助脚本。参数和构建N个项目。

请注意下面的代码仅显示如何获得您所要求的内容,但需要使用适当的 WithCriteria 指令进行改进。如果按原样使用,则无法仅构建x64。

Task("Compile-x86"){ 
    BuildA(); 
    BuildB(); 
    BuildC();
 }; 

 Task("Init-x64")
    .IsDependentOn("Compile-x86"){ 
    //Your init code goes here 
 }; 

 Task("Compile-x64")
    .IsDependentOn("Init-x64"){ 
    BuildA(); 
    BuildB();
    BuildC();
 }; 

 Task("Compile-All-Platforms")
 .IsDependentOn("Compile-x64");