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