有没有办法从FAKE构建目标登记到TFS?

时间:2015-01-14 23:44:51

标签: tfs f# msbuild f#-fake

我正在尝试创建FAKE(F#Make)构建目标,该目标将在成功构建后更新项目中的AssemblyInfo文件。版本信息文件存储在TFS CVS中,因此我需要从FAKE构建任务中将更新的文件签入TFS。

使用TFS 2010,从自定义活动中调用FAKE。

我的流程是: - ...清理,调用构建目标 - 更新AssemblyInfo文件 - 签入文件到TFS

面对TFS问题的登记......

有没有办法从FAKE(F#Make)目标办理登机手续?

1 个答案:

答案 0 :(得分:0)

是的,但这将分为两部分。此外,这适用于TFS 2015新的Build Definitions和TFS Git存储库。您可以根据需要对其进行修改以适应您的特定情况。可以根据需要调用这两个目标。

第一部分 - 更新AssemblyInfo文件

let AssemblyInfoFiles = !! @"src\**\AssemblyInfo.cs";
Target "SetVersions" (fun _ ->
  AssemblyInfoFiles
  |> Seq.iter (fun a ->
                  if tfBuildNumber <> null then
                    if isLocalBuild = false then
                      UpdateAttributes a [ Attribute.FileVersion tfBuildNumber]
              )
)

第II部分 - 签入修改后的AssemblyInfo文件

let CheckInMessage = "Files related to versioning where checked in.  ***NO_CI***"
let tfBuildSourceBranchName =  environVar "BUILD_SOURCEBRANCHNAME"
let tfBuilderRepositoryProvider = environVar "BUILD_REPOSITORY_PROVIDER"
Target "CheckinFiles" (fun _ ->
  AssemblyInfoFiles
  |> Seq.iter (fun a ->
          //This is for GIT REPOSITORY in TFS 2015 Build Definition
          if isLocalBuild = false &&  tfBuilderRepositoryProvider = "TfsGit" then
            checkoutBranch solutionDir tfBuildSourceBranchName
            trace ("File to stage: " + a)
            StageFile solutionDir a |> ignore
            Commit solutionDir CheckInMessage
            pull solutionDir "origin" tfBuildSourceBranchName
            push solutionDir
          )
)

第二部分的问题是它为EACH AssemblyInfo做了提交,而我想在一次提交中批量处理它们。我能做到这一点,我只是懒得修理它。