我正在学习TFS2010团队构建,工作流和MSBuild。我对Workflow有了一般的了解,最近能够成功地进行测试。
现在我需要一些帮助来保持构建版本和程序集版本同步。我一直在阅读Jim Lamb和John Robbins关于这个主题的几个博客,但是现在我感觉比起初时更加困惑。 Jim Lamb的博客讨论了使用自定义活动,该活动使用当前日期来设置版本号,John Robbins的博客讨论了如何获取最后一个程序集版本并在MSBuild中执行所有操作,因为没有额外的依赖项。
目前我们使用的是4位版本号,例如3.8.0.2,然后我们增加每个构建的最后一个数字。我们使用此版本来同步所有程序集。我们希望保持这种格式,我想处理我在工作流程中的所有版本,但是我不知道如何以这种方式从汇编中读取最后一个版本。我想这将需要编写一个自定义活动,但我会用什么方法来阅读上一个版本?
提前致谢! 吉姆
答案 0 :(得分:3)
Stuart Preston解释了一种在他的博客上设置汇编信息的简单方法: http://stuartpreston.net/blog/2010/05/02/simple-assembly-versioning-with-team-build-2010/
修改强>
上面的链接已经死了,这是缓存的版本:
Stuart Preston于2010年5月2日在Team Foundation Server下发布
有许多更复杂的方法可以实现这一目标,但似乎没有一个方法能给我我想要的东西,所以在这里我提出了另一种使用Team Build 2010进行汇编版本控制的方法。我希望我的Team Build编号完全匹配我的汇编版本(而不是派生版本),如下所示:
(图像)
所以这就是我的表现方式。首先,我在构建定义中自定义BuildNumber格式:
(图像)
就我而言,我决定对其进行自定义,以便明确添加主要版本号和次要版本号“0.1”。这让我可以控制版本号的前两部分,这是我想要实现的。我还在其前面添加了一个$(Month)$(DayOfMonth)
的宏1
。对于2010年5月2日,这将生成一个数字10502.(我之所以不使用全年的原因是,今天它将生成100502的内部版本号,文件版本号不能高于65335)。
当我决定使用版本0.2,0.3或1.0时,我所要做的就是在这里增加Build Number并保存定义,我也很高兴在年份变化时增加数字。我说这很简单!
构建号格式的最后一部分保持原样(即修订号在当天每次构建时增加1并在第二天重置)。
现在我们需要做的就是在针对解决方案运行MSBuild
时检索此版本号,拆分版本号并将数字部分放入Properties\AssemblyVersion.cs
文件中(您需要注释掉)首先在该文件中的AssemblyFileVersion
行并将其签入。)
以下是您需要在.csproj
文件中插入的片段(您必须先将其检出,然后在记事本或您喜欢的文本编辑器中打开它)。
<UsingTask
TaskName="Microsoft.TeamFoundation.Build.Tasks.GetBuildProperties"
AssemblyFile="$(MSBuildProgramFiles32)\Microsoft Visual Studio 10.0\Common7\IDE\PrivateAssemblies\Microsoft.TeamFoundation.Build.ProcessComponents.dll"
Condition="' $(BuildUri) '!=' '"/>
<Target Name="BeforeBuild" Condition="' $(BuildUri) '!=' '">
<GetBuildProperties TeamFoundationServerUrl="$(TeamFoundationServerUrl)" BuildUri="$(BuildUri)">
<Output TaskParameter="BuildNumber" PropertyName="BuildNumber" />
</GetBuildProperties>
<PropertyGroup>
<BuildNumberSplitLocation>$([MSBuild]::Add($(BuildNumber.LastIndexOf('_')),1))</BuildNumberSplitLocation>
</PropertyGroup>
<ItemGroup>
<AssemblyVersionLines Include="[assembly:AssemblyFileVersion("$(BuildNumber.Substring($(BuildNumberSplitLocation)))")]" />
</ItemGroup>
<Exec Command="attrib -r "$(ProjectDir)\Properties\AssemblyInfo.cs"" ContinueOnError="false" />
<Message Text="Lines being added: @(AssemblyVersionLines)" Importance="high" />
<WriteLinesToFile File="$(ProjectDir)\Properties\AssemblyInfo.cs" Lines="@(AssemblyVersionLines)" />
</Target>
(参考结束)
他修改了csproj
文件,以便在使用AssemblyInfo.cs
传入的值构建之前更新TFS
文件,以便根据MMDDRev
<的排列对程序集进行版本控制/ p>
您的情况有点不同,因为您需要自定义内部版本号。为此,您可以将BuildNumberFormat
修改为3.8.0.$(Rev:.r)
。由于修订是唯一改变,TFS
将自动为您增加。
如果您想要更新3.8.0.
部分,可以再次手动编辑内部版本号格式。否则你需要一个存储和解决方案。将构建号解析为BeforeBuild
中csproj
任务的一部分。