我正在尝试创建FAKE(F#Make)构建目标,该目标将在成功构建后更新项目中的AssemblyInfo文件。版本信息文件存储在TFS CVS中,因此我需要从FAKE构建任务中将更新的文件签入TFS。
使用TFS 2010,从自定义活动中调用FAKE。
我的流程是: - ...清理,调用构建目标 - 更新AssemblyInfo文件 - 签入文件到TFS
面对TFS问题的登记......
有没有办法从FAKE(F#Make)目标办理登机手续?
答案 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做了提交,而我想在一次提交中批量处理它们。我能做到这一点,我只是懒得修理它。