如何使用TFS服务器在.proj(MSBuild)中获取BuildNumber

时间:2011-09-07 07:36:13

标签: msbuild tfs2010

我们将TFS 2010与VS 2010一起用于PHP Web项目。实际上我们没有任何.proj或.sln文件,所以我自己做了构建,它看起来像这样:

<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
    <Import Project="$(MSBuildExtensionsPath)\MSBuildCommunityTasks\MSBuild.Community.Tasks.Targets"/>
    <ItemGroup>
        <ZipFiles Include="**\*.*"/>
    </ItemGroup>

    <Target Name="Zip" >
        <Zip Files="@(ZipFiles)" ZipFileName="$(OutDir)myzip.zip" />
    </Target>

    <Target Name="Build" DependsOnTargets="Zip">
        <Message Text="My Build Complete - $(BuildNumber) - $(TeamProject) - $(BuildProperties)" />
    </Target>
    <Target Name="AfterBuild">
        <MakeDir Directories="Testing" />
        <Message Text="My AfterBuild- $(BuildNumber) "></Message>
    </Target>
</Project>

我已在VS中的构建定义中将构建号配置为“$(BuildDefinitionName)_ $(Date:yyyyMMdd)$(Rev:.r)”,并且正确创建了网络路径上的drop文件夹。

问题是$(BuildNumber)或$(TeamProject)或$(BuildProperties)是空的。而且似乎“我的Afterbuild”从未被执行过。

为什么我的变量为空,以及如何从指定的构建定义中获取构建号?

1 个答案:

答案 0 :(得分:11)

运行AfterBuild目标:

<DefaultTargets="AfterBuild" />

<Target Name="Build" DependsOnTargets="Zip">

<Target Name="AfterBuild" DependsOnTargets="Build">

对于我来说,不清楚为什么Zip目标应该在Build目标之前执行?

编辑:

您必须通过手动将BuildNumber添加到MSBuild命令行来更新模板文件defaultTemplate.XAML,因此命令行将类似于:

<mtbwa:MSBuild CommandLineArguments="[String.Format(&quot;
        /p:SkipInvalidConfigurations=true 
        /p:BuildNumber={1} {0}&quot;, 
        MSBuildArguments, 
        BuildDetail.BuildNumber)]" />

请参阅有关此技巧的原始文章:TFS2010 – Where is $(BuildNumber)?