捕获 msbuild tf.exe 变更集/最新
Capture msbuild tf.exe changeset /latest
在 MSBuild 文件中,我想从以下命令的输出中提取 changeset
数字到 $(parameter)
值;
<Exec Command="c:\path\tf.exe changeset /latest /i" />
在我的构建脚本中,我可以在结果的第一行看到变更集编号:
Changeset: 7539
User: John Doe
Date: 23 September 2015 17:03:19
Comment:
some check-in comment
Items:
[[List of items here]]
Work Items:
[[List of linked work items here]]
我觉得我很接近,想要最简单的解决方案。如果有更好的选择,我可以使用 MSBuild.ExtensionPack 或 MSBuild.Community 任务。
只获取变更集编号,请尝试以下步骤:(代码引用自link):
- 在机器上下载并安装MSBuildExtensionPack
- 将以下代码添加到 .csproj 文件(假设您正在使用 C# 项目)。注意:您需要为 AssemblyFile 属性 更改机器上安装 MSBuild.ExtensionPack.TaskFactory.PowerShell.dll 的文件夹路径。
<UsingTask TaskFactory="PowershellTaskFactory" TaskName="Changeset" AssemblyFile="C:\Program Files\MSBuild\ExtensionPack.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>
您可以使用一些新的标准 MsBuild 功能来实现此目的。
<PropertyGroup>
<TF>"$(VS140COMNTOOLS)..\IDE\tf.exe"</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>
在 MSBuild 文件中,我想从以下命令的输出中提取 changeset
数字到 $(parameter)
值;
<Exec Command="c:\path\tf.exe changeset /latest /i" />
在我的构建脚本中,我可以在结果的第一行看到变更集编号:
Changeset: 7539
User: John Doe Date: 23 September 2015 17:03:19Comment:
some check-in commentItems: [[List of items here]]
Work Items: [[List of linked work items here]]
我觉得我很接近,想要最简单的解决方案。如果有更好的选择,我可以使用 MSBuild.ExtensionPack 或 MSBuild.Community 任务。
只获取变更集编号,请尝试以下步骤:(代码引用自link):
- 在机器上下载并安装MSBuildExtensionPack
- 将以下代码添加到 .csproj 文件(假设您正在使用 C# 项目)。注意:您需要为 AssemblyFile 属性 更改机器上安装 MSBuild.ExtensionPack.TaskFactory.PowerShell.dll 的文件夹路径。
<UsingTask TaskFactory="PowershellTaskFactory" TaskName="Changeset" AssemblyFile="C:\Program Files\MSBuild\ExtensionPack.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>
您可以使用一些新的标准 MsBuild 功能来实现此目的。
<PropertyGroup>
<TF>"$(VS140COMNTOOLS)..\IDE\tf.exe"</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>