【问题标题】:How to get BuildNumber in .proj (MSBuild) using TFS server如何使用 TFS 服务器在 .proj (MSBuild) 中获取 BuildNumber
【发布时间】:2011-09-07 07:36:13
【问题描述】:

我们将 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)" ,并且正确创建了网络路径上的放置文件夹。

问题在于 $(BuildNumber) 或 $(TeamProject) 或 $(BuildProperties) 为空。此外,似乎“我的 Afterbuild”从未被执行。

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

【问题讨论】:

    标签: msbuild


    【解决方案1】:

    运行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)?

    【讨论】:

    • 是的,对于 DefaultTargets 的错误,我们深表歉意。无论如何先压缩,然后构建只做消息。同样在许多论坛上,$(BuildNumber) 与 $(OutDir) 标准相同,但在我的情况下它不起作用,也许我需要别的东西?如何从构建定义中获取构建号? , 另外在Build完成后应该再次执行AfterBuild,在我的情况下不需要,有人告诉BuildNumber变量可用,但不是,你可以忽略AfterBuild。我也不能将任何参数传递给 msbuil,因为它是 TFS 2010 服务器上的构建代理服务器。
    • 您是否有权访问流程模板文件 defaultTemplate.XAML ?
    • 是的,我可以复制并修改它。告诉我我需要做什么
    • @Hrvoje Kusulja:请参阅我的答案的编辑部分,您需要手动添加 /p:BuildNumber={1} 参数并将其作为 BuildDetail.BuildNumber 传递
    • 好的,谢谢,我明白了。我已经以这种方式进行了修改,但是我得到:MSBUILD:错误MSB1001:未知开关。开关: - 对于开关语法,键入“MSBuild /help”。我在 2008 R2 服务器上有 TFS 2010。确实寻找类型但没有详细信息。 ://
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-05-26
    • 2018-03-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-30
    • 2016-05-24
    相关资源
    最近更新 更多