Tfs 在团队生成的生成后事件中包括分支名称

Tfs 在团队生成的生成后事件中包括分支名称,tfs,msbuild,workflow,tfsbuild,workflow-foundation,Tfs,Msbuild,Workflow,Tfsbuild,Workflow Foundation,我希望在TFS构建过程中执行以下步骤: 执行生成后事件,将一些文件从编译的项目复制到另一个预定义目录,我希望该目录路径包含分支名称 我希望能够在xaml工作流模板中引用分支名称 第一个问题相当简单。当您使用新的TFS 2013生成服务器和流程模板时,只需在生成定义配置中添加生成后powershell脚本,签入该脚本并在生成过程中运行即可 第二个取决于您使用的是TFVC还是Git,在第一种情况下,使用VersionControlServer类查询BranchObject,然后检查哪个是工作文件夹

我希望在TFS构建过程中执行以下步骤:

  • 执行生成后事件,将一些文件从编译的项目复制到另一个预定义目录,我希望该目录路径包含分支名称
  • 我希望能够在xaml工作流模板中引用分支名称

    • 第一个问题相当简单。当您使用新的TFS 2013生成服务器和流程模板时,只需在生成定义配置中添加生成后powershell脚本,签入该脚本并在生成过程中运行即可

      第二个取决于您使用的是TFVC还是Git,在第一种情况下,使用VersionControlServer类查询BranchObject,然后检查哪个是工作文件夹的根。但是请注意,在TFVC中,可以在一个工作区中引用多个分支,因此此查询可能有多个答案,具体取决于使用“查找分支根”命令的文件。一个定制的CodeActivity可以完成这个任务,类似于

      代码类似于:

       IBuildDetail buildDetail = context.GetExtension<IBuildDetail>();
      
       var workspace = buildDetail.BuildDefinition.Workspace;
       var versionControlServer = buildDetail.BuildServer.TeamProjectCollection.GetService<VersionControlServer>();
      
       var branches = versionControlServer.QueryRootBranchObjects(RecursionType.Full);
       var referencedBranches = listOfFilePaths.GroupBy(
                      file =>
                      branches.SingleOrDefault(
                           branch => file.ServerItem.StartsWith(branch.Properties.RootItem.Item)
                      )
                  ).Where(group => group.Key != null);
      
      或者深入并使用它根据自定义活动中的当前工作文件夹查找分支名称

      如果希望将其包含在MsBuild任务中,也可以这样做。对于这个答案来说,完全概述所需的步骤有点过分,但一旦你知道该做什么,就不难了

      ,而不是通过
      BuildDetail.BuildDefinition.workspace
      访问工作区,但是:


      TFVC还是Git?哪个TFS版本?哪个团队构建版本?您标记了MsBuild,但根据实际问题,我怀疑这不是您想要的。请确定,是要在生成工作流中解决此问题,还是要在项目文件中作为生成后操作解决此问题?1。TFVC 2013。实际上,我们正在使用这两种功能。我们在大多数项目中都编写了构建后事件,并且在执行服务器构建时也使用了一些工作流活动。我所关心的很简单:我希望能够在VisualStudio中的后期生成事件中使用$(branchName),以便将分支包含在文件夹名称中。然后,从工作流方面,我需要在服务器中创建此目录。谢谢。所以为了在构建的文件夹路径名中包含分支名称,我需要一个不同的脚本?如何将每个构建后事件(针对解决方案中的每个项目)集中到一个文件中?因为每一个都使用不同的路径从/复制到dll。。。。似乎有点复杂..Mate我必须创建一个脚本,在构建的git存储库上创建一个标记,即:如果构建运行,它会用版本标记提交。我想我可以使用后期构建脚本,但不确定如何使用上面的建议@jessehouwing谢谢你的详细信息。可悲的是,我不确定这是否是我所寻找的目标。因此,我将再试一次:正如我在原始帖子中所解释的,我的目标是在我的项目后期构建事件操作中包含当前的分支名称。e、 g-将复制所有二进制文件的生成后事件。(xcopy c:\workspace\$(branchName)\$(projectName)*.*)c:\targetFolder。你能帮我弄清楚吗?你得自己弄清楚。使用MsBuild任务复制文件非常容易,不需要Xcopy。(),我已经向您展示了如何提取分支名称,并指出了如何在自定义MsBuild任务中封装该名称。通过调用自定义任务来获取名称,然后调用复制任务来复制文件,将两者结合起来是问题中最简单的部分。根据我已经提供的信息,尝试构建所需内容,并提出新问题,或者使用更具体的问题更新此问题。不要要求我们为你做工作。
       git symbolic-ref --short HEAD   
      
      Workstation workstation = Workstation.Current;
      WorkspaceInfo info = workstation.GetLocalWorkspaceInfo(path);
      TfsTeamProjectCollection collection = new TfsTeamProjectCollection(info.ServerUri);
      Workspace workspace = info.GetWorkspace(collection);
      VersionControlServer versionControlServer = collection.GetService<VersionControlServer>();
      
      C:\Program Files (x86)\MSBuild\{MsBuild Version}\Microsoft.Common.Targets\ImportAfter