2015-05-13 46 views
0

我得到一個文本文件,其版本號在每個版本上更新,例如:1.4.10.301。用動態文件更新globalassemblyinfo.cs

我想將這個數字插入到我的globalassemblyinfo.cs文件的每一個版本上:[assembly: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"]