MSBuild TFS内部版本号

min*_*alg 9 msbuild tfs msbuild-task tfsbuild

我一直在使用SVN一段时间.最近我正在使用TFS的一个项目.在构建中,我喜欢在项目输出上追加/更新构建版本号.我在母版页上执行此操作,以便在应用程序中清晰可见.由于应用程序可以在多台计算机上运行,​​因此它是运行verison的便捷信息.

我在SVN世界中认识到:

  <!-- Import of the MSBuildCommunityTask targets -->
    <Import Project="$(MSBuildExtensionsPath)\MSBuildCommunityTasks\MSBuild.Community.Tasks.Targets" />
    <!-- to AssemblyInfo to include svn revision number -->
    <Target Name="BeforeBuild">
      <SvnVersion LocalPath="$(MSBuildProjectDirectory)" ToolPath="$(ProgramFiles)\CollabNet Subversion Client">
        <Output TaskParameter="Revision" PropertyName="Revision" />
      </SvnVersion>
      <Time>
        <Output TaskParameter="Year" PropertyName="Year" />
        <Output TaskParameter="Month" PropertyName="Month" />
        <Output TaskParameter="Day" PropertyName="Day" />
      </Time>
      <FileUpdate Files="MasterPage.master" Regex="svn revision: (\d+)\.(\d+)\.(\d+)\.(\d+)" ReplacementText="svn revision: $(Year).$(Month).$(Day).$(Revision)" />
    </Target>
Run Code Online (Sandbox Code Playgroud)

如上所示,"BeforeBuild"任务使用YYYY.MM.DD.SVNVERSION标记更新masterPage.master文件.

如何使用TFS作为源控件来实现此目的.我如何获得TFS内部版本号?

tec*_*ile 5

假设您的意思是Team Build,$(BuildNumber)属性包含当前的内部版本号.

有关可用属性的完整参考,请参见http://blogs.msdn.com/aaronhallberg/archive/2008/02/12/team-build-2008-property-reference.aspx.

如果您只是运行MSBuild,我不相信它生成/应用整体构建号(每个项目在其AssemblyInfo.cs [默认情况下]文件中将具有单独的,可能是自动递增的版本号).您可以在运行时使用System.Reflection.Assembly类动态获取特定程序集的此版本号.


更新

从TFS 2010开始,"BuildNumber"变量不再由TFS自动传递给MSBuild进程.TFS 2010现在使用Windows Workflow作为其内部构建引擎,因此如果您需要构建号,则必须修改构建定义以包含它,如本MSDN文章中所述.

  • 谢谢,解决了.<TfsVersion LocalPath ="$(MSBuildProjectDirectory)"> <输出TaskParameter ="Changeset"PropertyName ="Revision"/> </ TfsVersion> (6认同)