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

如何使用TFS服务器在.proj(MSBuild)中获取BuildNumber,msbuild,Msbuild,我们将TFS2010与VS2010一起用于PHP web项目。实际上,我们没有任何.proj或.sln文件,所以我自己制作了构建,看起来如下: <?xml version="1.0" encoding="utf-8"?> <Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> <Import Project="$(MSBuildE

我们将TFS2010与VS2010一起用于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)$(日期:yyyyMMdd)$(版本:.r)”,并且正确创建了网络路径上的放置文件夹

问题是$(BuildNumber)或$(TeamProject)或$(BuildProperties)为空。此外,“我的后建”似乎从未执行过


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

要在生成后运行
目标:


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

编辑:

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



请参阅有关此技巧的原始文章:

是的,对于DefaultTargets的错误,我深表歉意。不管怎样,先压缩,然后构建,它只处理消息。同样在很多论坛上,$(BuildNumber)和$(OutDir)是标准的,但在我的情况下它不起作用,也许我还需要其他东西?如何从生成定义中获取buildnumber,另外,在构建完成后应该再次执行后构建,在我的情况下,没有必要,有人告诉我BuildNumber变量将可用,但它不是,您可以忽略后构建。此外,我无法将任何参数传递给msbuil,因为它是TFS 2010服务器上的生成代理服务器。您是否有权访问流程模板文件defaultTemplate.XAML?是的,我可以复制并修改它。告诉我我需要什么do@HrvojeKusulja:请参见我答案的编辑部分,您需要手动添加/p:BuildNumber={1}参数,并将其作为BuildDetail.buildnumberrok传递,谢谢我看到了。我以这种方式进行了修改,但得到了:MSBUILD:错误MSB1001:未知开关。开关:-对于开关语法,键入“MSBuild/help”。我在2008 R2服务器上安装了TFS 2010。确实查找了类型,但没有详细信息:/