Подтвердить что ты не робот

Изменить только номер версии в AssemblyInfo.cs с задачей MSBuild FileUpdate

Мне нужно изменить только номер версии файла 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)")]' />

Теперь мне нужно обновить только номер версии и оставить основной, мелкий и построить без изменений. Итак, есть ли какая-то задача сделать это? Или это можно сделать с помощью регулярного выражения? Каким будет регулярное выражение?

4b9b3361

Ответ 1

Как насчет этого:

<FileUpdate Files="Properties/AssemblyInfo.cs"
   Regex="(\d+)\.(\d+)\.(\d+)\.(\d+)"
   ReplacementText="$1.$2.$3.$(Revision)" />

Ответ 2

Для этого я использую следующую цель:

<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)\(&quot;([0-9]+\.[0-9]+\.[0-9]+)(\.[0-9]+)?&quot;\)"
        ReplacementText="$1(&quot;$2.$(Revision)&quot;)" />
    <FileUpdate Files="@(AssemblyFiles)"
        Multiline="true"
        Singleline="false"
        Regex="AssemblyCompany\(&quot;.*&quot;\)"
        ReplacementText="AssemblyCompany(&quot;My Company&quot;)" />
    <FileUpdate Files="@(AssemblyFiles)"
        Multiline="true"
        Singleline="false"
        Regex="AssemblyCopyright\(&quot;.*&quot;\)"
        ReplacementText="AssemblyCopyright(&quot;Copyright &#169; 2009-$(Year) My Company&quot;)" />
</Target>

Это заменяет ревизию (четвертый номер) в любом из файлов AssemblyInfo (в нескольких проектах). Он рассматривает теги AssemblyVersion AssemblyFileVersionAttribute и AssemblyFileVersion и использует свойство $(Revision) MSBuild для числа (у меня есть еще одна цель, называемая GetRevision, которая получает это из SVN и устанавливает свойство, поэтому это зависит от этой цели). Замена регулярных выражений обрабатывает номера версий, которые имеют либо 3, либо 4 цифры (по какой-то причине у меня была группа с 3).

Он также устанавливает/перезаписывает информацию о Компании и авторских правах и устанавливает ее в "Моя компания". Для авторских прав я был ленив и делал это так, чтобы он всегда использовал текущий год, поэтому мне не нужно постоянно его обновлять (поэтому он говорит, например, "Copyright (c) 2009-2010 My Company" ).

Для этой цели требуется расширение MSBuild Community.


В соответствии с политикой, все проверенные в SVN имеют .0 как последнее число, и только сервер CI меняет это значение при выполнении сборки. Это позволяет нам быстро рассказать о различиях между созданными разработчиком сборками (которые никогда не разрешены для клиентов) и "официальными" сборками, созданными сервером CI.