Изменить только номер ревизии в AssemblyInfo.cs с помощью задачи MSBuild FileUpdate - PullRequest
12 голосов
/ 08 января 2010

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

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

Ответы [ 2 ]

16 голосов
/ 08 января 2010

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

<FileUpdate Files="Properties/AssemblyInfo.cs"
   Regex="(\d+)\.(\d+)\.(\d+)\.(\d+)"
   ReplacementText="$1.$2.$3.$(Revision)" />
7 голосов
/ 12 июня 2010

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

<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>

Это заменяет ревизию (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.

...