在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任务。
答案 0 :(得分:3)
要仅获取变更集编号,请尝试以下步骤:(代码来自此link):
<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>"$(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>