Ответ 1
Как насчет этого:
<FileUpdate Files="Properties/AssemblyInfo.cs"
Regex="(\d+)\.(\d+)\.(\d+)\.(\d+)"
ReplacementText="$1.$2.$3.$(Revision)" />
Мне нужно изменить только номер версии файла AssemblyInfo.cs
. Номер версии находится в формате Major.Minor.Build.Revision, например. 1.4.6.0
.
В настоящее время я меняю версию на задачу FileUpdate
(из Проект задач сообщества MSBuild) и следующее регулярное выражение:
<FileUpdate Files="@(AssemblyResult)"
Regex='(\[\s*assembly:\s*AssemblyVersion\(\s*"[^\.]+\.[^\.]+)\.([^\.]+)(\.)([^\.]+)("\)\s*\])'
ReplacementText='[assembly: AssemblyVersion("$(AssemblyMajorNumber).$(AssemblyMinorNumber).$(AssemblyBuildNumber).$(Revision)")]' />
Теперь мне нужно обновить только номер версии и оставить основной, мелкий и построить без изменений. Итак, есть ли какая-то задача сделать это? Или это можно сделать с помощью регулярного выражения? Каким будет регулярное выражение?
Как насчет этого:
<FileUpdate Files="Properties/AssemblyInfo.cs"
Regex="(\d+)\.(\d+)\.(\d+)\.(\d+)"
ReplacementText="$1.$2.$3.$(Revision)" />
Для этого я использую следующую цель:
<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>
Это заменяет ревизию (четвертый номер) в любом из файлов AssemblyInfo (в нескольких проектах). Он рассматривает теги AssemblyVersion AssemblyFileVersionAttribute и AssemblyFileVersion и использует свойство $(Revision) MSBuild для числа (у меня есть еще одна цель, называемая GetRevision, которая получает это из SVN и устанавливает свойство, поэтому это зависит от этой цели). Замена регулярных выражений обрабатывает номера версий, которые имеют либо 3, либо 4 цифры (по какой-то причине у меня была группа с 3).
Он также устанавливает/перезаписывает информацию о Компании и авторских правах и устанавливает ее в "Моя компания". Для авторских прав я был ленив и делал это так, чтобы он всегда использовал текущий год, поэтому мне не нужно постоянно его обновлять (поэтому он говорит, например, "Copyright (c) 2009-2010 My Company" ).
Для этой цели требуется расширение MSBuild Community.
В соответствии с политикой, все проверенные в SVN имеют .0 как последнее число, и только сервер CI меняет это значение при выполнении сборки. Это позволяет нам быстро рассказать о различиях между созданными разработчиком сборками (которые никогда не разрешены для клиентов) и "официальными" сборками, созданными сервером CI.