在VS中,通常在Build(增量式)和Rebuild之间进行区分,后者将先进行清理,然后再执行与Build相同的操作。我可以使用FAKE提供类似的行为吗?

让我们假设以下目标:

Target "Clean" DoNothing
Target "Work" DoNothing
Target "All" DoNothing

RunTargetOrDefault "All"

通常,我要运行所有这些文件,“工作前清洁”,因此最终得到:
"Clean" ==> "Work" ==> "All"

但是,Work并不是真正依赖于Clean的-仅是要同时运行Clean,必须首先运行Clean。有了上面的依赖关系链,如果没有先运行Clean,就无法运行Work。有没有办法或通用的模式来支持这一点?

到目前为止,我已经考虑了:

一种)
"Clean" ==> "All"
"Work" ==> "All"

这正确表示了All的依赖关系,但是缺少了Clean应该在Work之前执行的顺序(如果两者都运行)。

B)
Target "WorkOnly" DoNothing
"WorkOnly" ==> "Work"
"Clean" ==> "Work" ==> "All"

这有点儿接近,但是仍然不能保证在构建All Clean时会在WorkOnly之前运行

C)
Target "Start" DoNothing
"Start"
  =?> ("Clean", not (hasBuildParam "noclean"))
  ==> "Work"
  ==> "All"

这样,“清理”将始终运行,除非我将“noclean”指定为参数。
这似乎完全支持我的情况,并且实际上相当灵活,但是如果有多个可选阶段,可能会变得有些复杂。

这是预期的方式吗,其他人也如何做到?还是我遗漏了一些明显的东西?

最佳答案

不,目前没有运营商。您可能要使用新的运算符创建拉取请求。

对于将来的目标依赖项运行时,我们也有一个prototype implementation。您也可以尝试在此处添加新的运算符。

关于f#-fake - 伪造模式将目标构建顺序与依赖关系分开,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21334283/

10-14 12:00