MSBuild TFS构建编号

9

我现在已经使用SVN一段时间了。最近在一个项目中我开始使用TFS。在构建过程中,我希望将版本号附加/更新到项目输出上。我在主页面上进行这个操作,以便在应用程序中清晰可见。由于应用程序可能在多台机器上运行,了解正在运行的版本是很方便的信息。

在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>

如上所示,“BeforeBuild”任务使用YYYY.MM.DD.SVN版本号更新masterPage.master文件。

如果使用TFS作为源控制方式,该如何实现呢?如何获取TFS构建号?


你的示例源代码被吃掉了。 - Andriy Volkov
1个回答

5
假设您所说的是团队生成(Team Build),$(BuildNumber) 属性包含当前生成的版本号。
有关可用属性的完整参考,请参见此处
如果您只是运行 MSBuild,则我认为它不会生成/应用总体生成号码(每个项目将在其 AssemblyInfo.cs [默认情况下] 文件中具有单独的、可能是自动递增的版本号码)。您可以在运行时使用 System.Reflection.Assembly 类获取特定程序集的此版本号。
更新
自 TFS 2010 起,“BuildNumber”变量不再由 TFS 自动传递到 MSBuild 进程。TFS 2010 现在使用 Windows Workflow 作为其内部生成引擎,因此,如果您想要生成号码,您需要修改生成定义以包括它,如此 MSDN 文章所述。

6
谢谢,问题已解决。 <TfsVersion LocalPath="$(MSBuildProjectDirectory)"> <Output TaskParameter="Changeset" PropertyName="Revision"/> </TfsVersion> - minalg
啊,是的,这对于非团队构建构建来说是一个好的解决方案,我得记住这个。 - technophile
至少从TFS 2013开始,您不必修改构建定义。您可以读取环境变量$(TF_BUILD_BUILDNUMBER)。有关所有环境变量的列表,请参见此答案:https://dev59.com/eWEh5IYBdhLWcg3wjD_n - berhir

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接