捕获msbuild tf.exe changeset / latest

时间:2015-09-23 16:52:28

标签: tfs msbuild tfsbuild changeset

在MSBuild文件中,我想从以下命令的输出中将changeset数字提取到$(parameter)值;

<Exec Command="c:\path\tf.exe changeset /latest /i" />

在我的构建脚本中,我可以在结果的第一行看到Changeset编号:

  

变更集:7539
  用户:John Doe   日期:2015年9月23日17:03:19

     

注释:
    一些签到评论

     

产品:   [[此处的项目清单]]

     

工作项目:   [[此处链接的工作项目清单]]

我觉得我很亲密,想要最简单的解决方案。如果有更好的选择,我可以使用MSBuild.ExtensionPack或MSBuild.Community任务。

2 个答案:

答案 0 :(得分:3)

要仅获取变更集编号,请尝试以下步骤:(代码来自此link):

  1. 在机器上下载并安装MSBuildExtensionPack
  2. 将以下代码添加到.csproj文件中(假设您正在使用C#项目)。请注意:您需要更改计算机上为 AssemblyFile 属性安装 MSBuild.ExtensionPack.TaskFactory.PowerShell.dll 的文件夹路径。
  3.   <UsingTask TaskFactory="PowershellTaskFactory" TaskName="Changeset" AssemblyFile="C:\Program Files\MSBuild\ExtensionPack\4.0\MSBuild.ExtensionPack.TaskFactory.PowerShell.dll">
        <ParameterGroup>
          <changeset Output="true" />
        </ParameterGroup>
        <Task>
          <![CDATA[  
           $tf = & "C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\IDE\tf.exe" history . /r /noprompt /stopafter:1 /version:W 
           $changeset=$tf[2].Split(" ")[0] 
           ]]>
        </Task>
      </UsingTask>
      <Target Name="TestBuild">
        <Changeset>
          <Output TaskParameter="changeset" PropertyName="changeset" />
        </Changeset>
        <Message Importance="High" Text="Changeset:++++++ ::::: $(changeset)" />
      </Target>

答案 1 :(得分:0)

您可以使用一些新的标准MsBuild功能来实现此目的。

<PropertyGroup> 
  <TF>&quot;$(VS140COMNTOOLS)..\IDE\tf.exe&quot;</TF> 
</PropertyGroup>
<Target Name="GetVersion">
  <Exec Command="$(TF) changeset /latest /i" ConsoleToMSBuild="true">
    <Output TaskParameter="ConsoleOutput" PropertyName="TfOutput" />
  </Exec>
  <PropertyGroup>
    <Changeset>$(TfOutput.Split(';')[0].Substring(11))</Changeset>
  </PropertyGroup>
  <Message Importance="high" Text="ChangeSet is $(Changeset)" />
</Target>