2010-01-08 3 views
12

Мне нужно изменить только номер версии файла AssemblyInfo.cs. Номер версии находится в формате Major.Minor.Build.Revision, например. 1.4.6.0.Изменить только номер версии в AssemblyInfo.cs с задачей MSBuild FileUpdate

В настоящее время я изменить версию с FileUpdate задачи (от MSBuild Community Tasks Project) и следующее регулярное выражение:

<FileUpdate Files="@(AssemblyResult)" 
    Regex='(\[\s*assembly:\s*AssemblyVersion\(\s*"[^\.]+\.[^\.]+)\.([^\.]+)(\.)([^\.]+)("\)\s*\])' 
    ReplacementText='[assembly: AssemblyVersion("$(AssemblyMajorNumber).$(AssemblyMinorNumber).$(AssemblyBuildNumber).$(Revision)")]' /> 

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

+0

Этот вопрос вообще не связан с установщиком wix или windows, поэтому я отредактировал его соответствующим образом. –

+0

Еще одна вещь..может ли я использовать эти свойства $ 1, $ 2 и $ 3 далее ... как бы присвоить значение какой-либо другой собственности, принятой. ?? На самом деле мне нужно извлечь майор.minor, построить номер и использовать их где-то в другом месте. Так, для этого мне они нужны. Так, можете ли вы, пожалуйста, сделать последнюю услугу. –

ответ

16

Как об этом:

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

hii wcoenen, мы можем прочитать эти числа (регулярное выражение или $ 1. $ 2. $ 3. $ 4) назад. ?? .. Мне нужно прочитать первые три, то есть $ 1. $ 2. $ 3, и назначить там значение свойствам в MSBUILD .. вы можете мне помочь в этом ?? –

+2

Нет. Вы не можете использовать 'FileUpdate' для установки свойств msbuild. Вы можете использовать значения захваченных групп в заменяемом тексте, как я показал, но вы не можете использовать эти значения для установки свойств msbuild. –

+0

Это работает при добавлении как пользовательской задачи в файл csproj. Если ваша сборка командной строки проходит '/ p: Revision = 88', тогда первые 3 кватертера остаются неизменными, но номер версии обновляется в 'AssemblyInfo.cs'. Мое единственное предложение - использовать «Свойства/AssemblyInfo.cs» относительно местоположения файла csproj. – justdan23

7

Я использую следующую цель, чтобы сделать это:

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


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

 Смежные вопросы

  • Нет связанных вопросов^_^