将装配版本号与TFS Buildnumber对齐

Fad*_*oof 13 versioning msbuild tfs

我想知道是否有一种方法来同步构建号码(20080213.1)而不使用BuildNumberOverrideTarget,我将不得不生成自己的内部版本号?我基本上想要使用默认/内置tfs buildnumber生成器,但想要访问它以使我的程序集版本与它对齐.可以这样做,这是一种明智的方式吗?

Mar*_*ard 10

你要求的是非常明智的,有很多方法可以达到这个目的.

就个人而言,当我这样做时,我不喜欢检查版本控制中的文件,其中包含构建服务器生成的编号 - 它只是在跨分支合并代码时引入了太多的头痛,但我也喜欢已知的版本号当开发人员进行工作站构建而不是正确的构建服务器派生程序集时使用,以便很容易区分它们.

有关我喜欢这样做的更多信息,请查看TFS Build Recipies wiki:

或者我关于这个主题的博客文章

希望有所帮助,

马丁.


Ray*_*sen 8

是的你可以.在某些时候,可能在AfterGet,您可以使用BuildNumber并创建自定义任务来更新源代码中的AssemblyInfo.cs文件.

我们已经连接到AfterGet并导致我们的目标依赖:

<Target Name="AfterGet" DependsOnTargets="VersionAssemblies" />
Run Code Online (Sandbox Code Playgroud)

我们的VersionAssemblies Target从$(SolutionRoot)中提取所有AssemblyInfo.cs文件:

<CreateItem Include="$(SolutionRoot)\**\AssemblyInfo.cs;">
    <Output TaskParameter="Include" ItemName="AssemblyInfos"/>
 </CreateItem>
Run Code Online (Sandbox Code Playgroud)

检查出来:

<Exec Command="$(TfCommand) checkout &quot;AssemblyInfo.cs&quot; -r"
          WorkingDirectory="$(MSBuildProjectDirectory)\..\sources" ContinueOnError="true"/>
Run Code Online (Sandbox Code Playgroud)

编辑它们并用$(BuildNumber)替换文件版本:

<File.Replace Path="%(AssemblyInfos.FullPath)"
                  NewValue="AssemblyFileVersion(&quot;$(BuildNumber)&quot;)"
                  RegularExpression="AssemblyFileVersion\(\&quot;(\d+.\d+.\d+.\d+)\&quot;\)"
                  IgnoreCase="true"
                  Force="true"/>
Run Code Online (Sandbox Code Playgroud)

然后检入文件:

<Exec Command="$(TfCommand) checkin /override:&quot;Automated&quot; /comment:&quot;Update AssemblyInfo files to version number $(BuildNumber) - $(NoCICheckinComment) &quot; /noprompt &quot;AssemblyInfo.cs&quot; /recursive"
          WorkingDirectory="$(MSBuildProjectDirectory)\..\sources" ContinueOnError="false"/>
Run Code Online (Sandbox Code Playgroud)

为了替换文件版本,我使用CodePlex上的Microsoft SDC任务附带的File.Replace任务.

另请注意,如果您有一个在签入时触发的构建,则在签入AssemblyInfo.cs文件时,请确保该注释包含$(NoCICheckinComment),因为这会导致TFS不会触发另一个构建,否则您将最终进入一个无限的构建循环.