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)
带有 a的宏。1
对于 2010 年 5 月 2 日,这将生成一个数字 10502。(我在这里不使用全年的原因是今天它会生成一个内部版本号 100502 并且文件版本号不能高于 65335)。
当我决定在版本 0.2、0.3 或 1.0 上工作时,我所要做的就是在此处增加内部版本号并保存定义,我也很高兴在年份变化时增加编号。我说很简单!
内部版本号格式的最后一部分保持原样(即版本号在当天每次构建时递增 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
您的情况有点不同,因为您想要一个自定义内部版本号。为此,您可以BuildNumberFormat
将3.8.0.$(Rev:.r)
. 由于修订是唯一改变的东西,TFS
它将自动为您增加它。
如果您想更新该3.8.0.
部分,您可以再次手动编辑内部版本号格式。BeforeBuild
否则,您将需要一个解决方案来存储和解析内部版本号,作为csproj
.