Для этого я использую следующую цель:
<Target Name="UpdateAssemblyInfoVersion" DependsOnTargets="GetRevision">
<CreateItem Include="**\AssemblyInfo.vb">
<Output TaskParameter="Include" ItemName="AssemblyFiles"/>
</CreateItem>
<Time>
<Output TaskParameter="Year" PropertyName="Year" />
</Time>
<FileUpdate Files="@(AssemblyFiles)"
Multiline="true"
Singleline="false"
Regex="(AssemblyVersion|AssemblyFileVersionAttribute|AssemblyFileVersion)\("([0-9]+\.[0-9]+\.[0-9]+)(\.[0-9]+)?"\)"
ReplacementText="$1("$2.$(Revision)")" />
<FileUpdate Files="@(AssemblyFiles)"
Multiline="true"
Singleline="false"
Regex="AssemblyCompany\(".*"\)"
ReplacementText="AssemblyCompany("My Company")" />
<FileUpdate Files="@(AssemblyFiles)"
Multiline="true"
Singleline="false"
Regex="AssemblyCopyright\(".*"\)"
ReplacementText="AssemblyCopyright("Copyright © 2009-$(Year) My Company")" />
</Target>
Это заменяет ревизию (4-е число) в любом из файлов AssemblyInfo (в нескольких проектах). Он просматривает теги AssemblyVersion AssemblyFileVersionAttribute и AssemblyFileVersion и использует для номера свойство MSBuild $ (Revision) (у меня есть еще одна цель, называемая GetRevision, которая получает это из SVN и устанавливает свойство, поэтому эта зависит от этой цели). Замена regex обрабатывает номера версий, которые имеют 3 или 4 цифры (по какой-то причине у меня была связка только с 3).
Он также устанавливает / перезаписывает информацию о компании и авторских правах и устанавливает для нее значение «Моя компания». Что касается авторского права, я был ленив и сделал так, чтобы он всегда использовал текущий год, поэтому мне не нужно обновлять его каждый год (так написано, например, «Copyright (c) 2009-2010 My Company»).
Для этой цели требуется расширение MSBuild Community .
В соответствии с политикой, все, что зарегистрировано в SVN, имеет .0 в качестве последнего числа, и только сервер CI изменяет это значение при выполнении сборки. Это позволяет нам быстро определить разницу между созданными разработчиками сборками (которые никогда не разрешены для пользователей) и «официальными» сборками, созданными сервером CI.