Да, вы можете. В какой-то момент, возможно, в AfterGet, вы можете использовать BuildNumber и создать пользовательскую задачу для обновления файлов AssemblyInfo.cs в вашем исходном коде.
Мы подключились к AfterGet и заставили нашу цель зависеть:
<Target Name="AfterGet" DependsOnTargets="VersionAssemblies" />
Наша версия VersionAssemblies извлекает все файлы AssemblyInfo.cs из $ (SolutionRoot):
<CreateItem Include="$(SolutionRoot)\**\AssemblyInfo.cs;">
<Output TaskParameter="Include" ItemName="AssemblyInfos"/>
</CreateItem>
проверяет их:
<Exec Command="$(TfCommand) checkout "AssemblyInfo.cs" -r"
WorkingDirectory="$(MSBuildProjectDirectory)\..\sources" ContinueOnError="true"/>
редактирует их и заменяет версию файла на $ (BuildNumber):
<File.Replace Path="%(AssemblyInfos.FullPath)"
NewValue="AssemblyFileVersion("$(BuildNumber)")"
RegularExpression="AssemblyFileVersion\(\"(\d+.\d+.\d+.\d+)\"\)"
IgnoreCase="true"
Force="true"/>
и затем проверяет файлы обратно:
<Exec Command="$(TfCommand) checkin /override:"Automated" /comment:"Update AssemblyInfo files to version number $(BuildNumber) - $(NoCICheckinComment) " /noprompt "AssemblyInfo.cs" /recursive"
WorkingDirectory="$(MSBuildProjectDirectory)\..\sources" ContinueOnError="false"/>
Для замены версий файлов я использую задачу File.Replace, которая входит в задачи Microsoft SDC в CodePlex.
Также обратите внимание, что если у вас есть сборка, которая запускается при регистрации, при проверке в файлах AssemblyInfo.cs убедитесь, что комментарий содержит $ (NoCICheckinComment), поскольку это заставляет TFS не запускать другую сборку, в противном случае в конечном итоге в бесконечном цикле сборки.