在VS中,Build(incremental)和Rebuild之间通常有区别,后者首先要清理,然后像Build一样.我能用FAKE提供类似的行为吗?
我们假设以下目标:
Target "Clean" DoNothing
Target "Work" DoNothing
Target "All" DoNothing
RunTargetOrDefault "All"
Run Code Online (Sandbox Code Playgroud)
通常我想运行所有这些,在工作前清洁,所以我最终得到:
"Clean" ==> "Work" ==> "All"
Run Code Online (Sandbox Code Playgroud)
但是,Work并不是真正依赖Clean - 只有两者都要运行时才能运行Clean.使用上面的依赖链,我无法运行Work而不首先运行Clean.是否有方法或共同模式来支持这一点?
到目前为止我考虑过的事情:
一个)
"Clean" ==> "All"
"Work" ==> "All"
Run Code Online (Sandbox Code Playgroud)
这正确地表示了All的依赖关系,但是在工作之前清理应该是的顺序 - 如果两者都运行 - 都缺失了.
B)
Target "WorkOnly" DoNothing
"WorkOnly" ==> "Work"
"Clean" ==> "Work" ==> "All"
Run Code Online (Sandbox Code Playgroud)
这有点接近,但它仍然无法保证在WorkOnly之前构建All that Clean将运行
C)
Target "Start" DoNothing
"Start"
=?> ("Clean", not (hasBuildParam "noclean"))
==> "Work"
==> "All"
Run Code Online (Sandbox Code Playgroud)
这样,除非我指定"noclean"作为参数,否则Clean将始终运行.这似乎完全支持我的场景,实际上非常灵活,但如果有多个可选阶段,可能会有点复杂.
这是预期的方式以及其他人如何做到这一点,还是我错过了一些明显的东西?
我参加派对有点晚了......但我最近遇到了这种要求.
我终于解决了以下问题:
在你的情况下会留下你
Target "Clean" DoNothing
Target "Work" DoNothing
Target "Build" (fun _ ->
Run "Work"
)
Target "Rebuild" (fun _ ->
"Clean"
==> "Work"
Run "Work"
)
Run Code Online (Sandbox Code Playgroud)