自定义生成号
本主题介绍在使用升级模板时如何自定义内部版本号。 有关升级模板的更多信息,请参见使用升级模板定义生成。 使用默认模板可以更为轻松地执行此过程。 有关更多信息,请参见使用默认模板定义生成。
您可以通过自行创建生成过程中运行的自定义任务来自定义 Team Foundation Build。 本主题介绍使用生成内部版本号的任务来自定义 Team Foundation Build 生成定义时必须遵循的步骤。
系统必备
在创建自定义内部版本号的任务之前,请确保满足以下条件:
访问要进行自定义的生成定义的 TFSBuild.proj 文件的权限。
TFSBuild.proj 文件可以与一个以上生成定义相关联。 若要确定 TFSBuild.proj 文件的源代码管理位置,请在团队资源管理器的**“生成”文件夹中选择生成定义,右击该生成定义,然后单击“编辑”。 TFSBuild.proj 文件的源代码管理位置显示在“生成定义”对话框中的“项目文件”**窗格中。 默认情况下,TFSBuild.proj 文件位于 Team Foundation 版本控制的 $/MyTeamProject/TeamBuildTypes/MyBuildName 文件夹中。 MyTeamProject 是团队项目的名称,也是所有团队项目源代码的根节点。 MyBuildName 是您为与 TFSBuild.proj 文件关联的第一个生成定义指定的名称。 有关如何创建 Team Foundation Build 生成类型的更多信息,请参见创建基本生成定义。
重要事项 自定义 TFSBuild.proj 文件时,需要自定义与该文件相关的每个生成定义。
一个位于本地计算机上的本地工作区,其中包含团队项目文件和生成文件。
有关更多信息,请参见创建工作区并获取文件和获取团队项目的源代码。
所需权限
若要执行此任务,您的**“管理生成”和“管理工作区”的权限必须设置为“允许”。 还必须将“签入”和“签出”权限设置为“允许”**。 有关更多信息,请参见 Team Foundation Server 权限。
编写内部版本号任务
若要编写任务,可以直接实现 ITask 接口,或者从帮助器类 Task 派生类。 ITask 在 Microsoft.Build.Framework.dll 程序集中定义,Task 在 Microsoft.Build.Utilitites.dll 程序集中定义。
若要自定义 Team Foundation Build 生成的内部版本号,必须将您的任务插入到 BuildNumberOverrideTarget 目标中。 BuildNumberOverrideTarget 要求具有一个名为 BuildNumber. 的输出属性。Output 特性表示此属性是您的自定义任务的输出。 有关 Team Foundation Build 目标的更多信息,请参见可自定义的 Team Foundation Build 目标。
编写自定义任务
创建一个包含自定义任务的名为 MyTask 的 Visual C# 类库。
有关更多信息,请参见组件类。
在**“项目”菜单上,单击“添加引用”,再从“添加引用”**对话框中选择“Microsoft.Build.Framework”和“Microsoft.Build.Utilities”。
将以下代码插入到 class.cs 文件。
本示例是从 Task 帮助器类继承的,并使用 DateTime 属性 UtcNow 和 Ticks 来产生内部版本号。
using System; using Microsoft.Build.Utilities; using Microsoft.Build.Framework; namespace BuildNumberGenerator { public class BuildNumberGenerator:Task { public override bool Execute() { m_buildNumber = DateTime.UtcNow.Ticks.ToString(); return true; } private string m_buildNumber; [Output] public string BuildNumber { get { return m_buildNumber; } } } }
生成类库以得到 MyTask.dll。
将生成的 dll 复制到本地工作区文件夹,此文件夹中还包含您的生成定义的 TFSBuild.proj 文件。
重要事项 必须先将 TFSBuild.proj 文件的源代码管理位置映射到本地工作区,此目录结构才会在客户端计算机上存在。 有关更多信息,请参见获取团队项目的源代码。
如果您的 TFSBuild.proj 文件存储在源代码管理的默认文件夹中,则该文件的本地副本位于客户端计算机上的“<根目录>:\本地工作区\TeamBuildTypes\MyBuildName”目录下。 本地工作区是将团队项目映射到其中的本地文件夹;MyTeamProject 是团队项目的名称;MyBuildName 是为与此 TFSBuild.proj 文件关联的第一个生成定义指定的名称。
将 dll 文件添加到源代码管理
创建了包含自定义任务的 dll 之后,必须将其添加到 Team Foundation 版本控制。 可以使用 tf add 和 tf checkin 命令,将 dll 添加并签入到您的生成定义的 TFSBuild.proj 文件所在的位置。 有关更多信息,请参见 Add 命令和 Checkin 命令。
添加并签入程序集
单击**“开始”,依次指向“所有程序”、“Microsoft Visual Studio 9.0”和“Visual Studio Tools”,然后单击“Visual Studio 2008 命令提示”**。 打开为以下团队项目映射的本地工作区:该团队项目中包含要自定义的生成类型。
例如,在命令提示符下键入以下命令。
> cd c:\MyTeamProject
其中 MyTeamProject 是您的团队项目的名称。
移动到 TFSBuild.proj 文件存储的位置。
例如,在命令提示符下键入以下命令。
c:\MyTeamProject>cd TeamBuildTypes\MyBuildName
其中 MyBuildName 是生成定义的名称。
若要将文件添加到 Team Foundation 版本控制,请键入以下命令。
c:\MyTeamProject\TeamBuildTypes\MyBuildName> tf add MyTask.dll
若要将文件签入到 Team Foundation 版本控制,请键入以下命令。
c:\MyTeamProject\TeamBuildTypes\MyBuildName> tf checkin MyTask.dll
可以使用团队资源管理器将 dll 添加到 Team Foundation 版本控制中。 有关更多信息,请参见向版本控制中添加文件。
注册任务
创建任务之后,必须通过在 TFSBuild.proj 文件的 UsingTask 元素中指定该任务来注册它。 UsingTask 元素会将该任务映射到包含该任务的实现的程序集。 有关更多信息,请参见 UsingTask 元素 (MSBuild)。
通过修改 TFSBuild.proj 文件来注册任务
启动 Visual Studio。
从 Team Foundation 版本控制签出要修改的 TFSBuild.proj 文件,并在 Visual Studio XML 编辑器中将其打开。
将 UsingTask 元素添加到 TFSBuild.proj 文件中紧随导入 (import) 语句的位置。
<UsingTask TaskName="BuildNumberGenerator.BuildNumberGenerator" AssemblyFile="MyTask.dll"/>
若要将任务插入到 BuildNumberOverrideTarget 目标,请将包含在 <Target></Target> 标记中的以下 XML 添加到 TFSBuild.proj 文件的结尾处。
</ItemGroup> <Target Name = "BuildNumberOverrideTarget" > <BuildNumberGenerator> <Output TaskParameter="BuildNumber" PropertyName="BuildNumber"/> </BuildNumberGenerator> </Target> </Project>
单击**“文件”,再单击“保存”**以保存更改,然后关闭 TFSBuild.proj。
提示
在对 TFSBuild.proj 文件进行这些修改之后,您将接收到 XML 架构警告。 您可以放心地忽略这些警告。
将 TFSBuild.proj 再签入回源代码管理。
修改完 TFSBuild.proj 文件并将更改保存到 Team Foundation 版本控制之后,运行生成定义。
有关更多信息,请参见将生成排入队列。
可以在生成资源管理器中查看自定义内部版本号。 有关更多信息,请参见监视正在运行的生成的进度。