2015-05-13 2 views
0

У меня есть текстовый файл с номером версии, который обновляется при каждой сборке i.e: 1.4.10.301.Обновить globalassemblyinfo.cs с динамическим файлом

Я хотел бы вставить этот номер в каждую сборку в мой файл globalassemblyinfo.cs в этой строке: [сборка: AssemblyVersion («1.4.10.300»)] и только номер версии, что означает перед сборкой globalassembly. cs-файл будет обновлен с новым номером версии из текстового файла (1.4.10.301).

Пробовал так:

$a = cat "C:\pathtofile\GlobalAssemblyInfo.cs" | select-string AssemblyVersion 

, который дает мне только эту строку:

[assembly: AssemblyVersion("1.4.10.331")] 

, но от этого мне нужно только номер, как я могу вытащить его? Пробовал использовать шаблон, но я не знал, что положить в шаблон точно

Код ниже работал как шарм, и мне удалось извлечь номер версии, теперь я пытаюсь заменить эту версию на один в globalassemblyinfo.cs, так что я написал эту строку:

$a -replace $version,$Newversion | Set-Content "C:\pathtofile\GlobalAssemblyInfo.cs" 

Но удаляется все содержимое файла и поместить эту строку вместо:

[assembly: AssemblyVersion("1.4.10.400")] 

Как я могу просто обновить строку без удаления всего файла содержание?

+0

Не делайте комментарий. Измените свой вопрос. – SomeShinyObject

ответ

0

нашел ответ, по-видимому, вы должны использовать команду Get-Content с скобкой, как это:

(Get-Content "C:\pathtofile\GlobalAssemblyInfo.cs") -replace $version,$Newversion | Set-Content "C:\pathtofile\GlobalAssemblyInfo.cs" 

Эта ссылка помогло: https://stackoverflow.com/a/17145810/4333722

1

После того, как вы получили строку, содержащую атрибут AssemblyVersion, вы можете захватить поле версии с named capture group, как это:

if($a -match '(?<version>(\d+\.?){4})'){ 
    $version = $Matches["version"] 
} 

Реальная картина: (\d+\.?){4} соответствует четыре последовательных вхождений одной или более цифр и опциональный точка - (?<version>) часть делает, что он получает захватывается в $Matches["version"]

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