在Build.Tools中,我们最终将不同脚本文件中的各种目标的代码作为普通的F#函数,然后在Core.fsx中组合目标,以设置目标及其依赖项.
我的低优先级待办事项列表中的一个实际上是将Core分成两个文件 - 一个用于构建配置和目标定义,另一个用于设置依赖项和调用Run
.这样,您可以重新使用所有基础目标,同时定义不必包含完整默认依赖关系树的不同运行程序.
目前的情况Core.fsx
如下:
#r "./fake/fakelib.dll" #load "./Utils.fsx" #load "./Packaging.fsx" #load "./Versioning.fsx" #load "./Solution.fsx" #load "./Test.fsx" #load "./Specflow.fsx" open System.IO open Fake let config = Map.ofList [ "build:configuration", environVarOrDefault "configuration" "Release" "build:solution", environVar "solution" "core:tools", environVar "tools" "packaging:output", environVarOrDefault "output" (sprintf "%s\output" (Path.GetFullPath("."))) "packaging:updateid", environVarOrDefault "updateid" "" "packaging:pushurl", environVarOrDefault "pushurl" "" "packaging:apikey", environVarOrDefault "apikey" "" "packaging:packages", environVarOrDefault "packages" "" "versioning:build", environVarOrDefault "build_number" "0" "versioning:branch", match environVar "teamcity_build_branch" with | "<default>" -> environVar "vcsroot_branch" | _ -> environVar "teamcity_build_branch" ] Target "Default" <| DoNothing Target "Packaging:Package" <| Packaging.package config Target "Packaging:Restore" <| Packaging.restore config Target "Packaging:Update" <| Packaging.update config Target "Packaging:Push" <| Packaging.push config Target "Solution:Build" <| Solution.build config Target "Solution:Clean" <| Solution.clean config Target "Versioning:Update" <| Versioning.update config Target "Test:Run" <| Test.run config Target "SpecFlow:Run" <| Specflow.run config "Solution:Clean" ==> "Packaging:Restore" ==> "Versioning:Update" ==> "Solution:Build" ==> "Packaging:Package" ==> "SpecFlow:Run" ==> "Test:Run" =?> ("Packaging:Push", not isLocalBuild) ==> "Default" RunParameterTargetOrDefault "target" "Default"