Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/326.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在Cakebuild中创建任务序列_C#_Cakebuild - Fatal编程技术网

C# 在Cakebuild中创建任务序列

C# 在Cakebuild中创建任务序列,c#,cakebuild,C#,Cakebuild,我正在使用Cake 0.23.0,很高兴看到任务依赖关系已经扩展。不幸的是,即使是最新版本也不能解决我的问题还是我只是做错了什么? 我想实现的目标 假设我定义的任务对于多个平台(例如x86或x64)是相等的 我想定义一个构建序列,首先为平台x86执行所有任务。一旦完成,应该执行一个init任务,该任务只是将平台设置为x64,然后执行与x86相同的任务 示例序列: 任务初始化x86->任务A->任务B->任务C->任务初始化x64->任务A->任务B->任务C 当前行为 生成的序列是 任务初始

我正在使用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");

如果您想分两个步骤进行构建,最简单的方法是将A、B和C的构建逻辑封装在helper函数中,然后将它们封装在x86或x64任务中。这里的想法是利用Cake能够为您创建的依赖关系树,而不是在CompileAll中写下所有依赖关系。实际上,这是您希望使用构建编排器的主要原因

当然,这是一种简单的方法,可以让它在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");

你好,雷诺,谢谢你的回答。我想我可以尽量减少任务和功能的数量。基本上,这些函数可以完成我需要的工作。我建议改进文档,因为对我来说,直到我遇到麻烦,C#Make的行为才清楚……另外一件重要的事情应该在文档中更好地突出显示给新手:如果你在一个定义了依赖项的任务中使用“WithCriteria”,比如“IsDependentOn…”,尽管未满足受抚养人的标准,仍将执行任务。一旦你知道了这一点,你就可以处理它了。你可以在提交你的评论,因为我不是蛋糕的贡献者。也就是说,如果您的构建步骤足够复杂,您可以(应该?)使用Cake扩展模块来封装每个构建步骤。您可以在一个方法中调用它两次,并在调用之间更改配置。但是你会有一个单一的构建脚本,尽管我很确定你最好使用更多的步骤,利用任务依赖性。请注意,我们不知道您系统的实际复杂性,这个答案认为您有3个项目和2个目标平台是理所当然的。我已经合并了一些任务,解决方案现在简单多了,看看这是否更好地满足您的要求