我一直在使用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>
如上所示,“BeforeBuild”任务使用YYYY.MM.DD.SVNVERSION标记更新masterPage.master文件。
如何使用TFS作为源控件来实现此目的。我如何获得TFS内部版本号?
答案 0 :(得分: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作为其内部构建引擎,因此如果您需要构建号,则必须修改构建定义以包含它,如this MSDN article中所述。