使用动态文件更新globalassemblyinfo.cs

时间:2015-05-13 11:40:39

标签: powershell versioning assemblyinfo

我得到了一个文本文件,其版本号在每个版本上都有更新,即:1.4.10.301。

我想在每行构建中将此编号插入到此行上的globalassemblyinfo.cs文件中:[assembly:AssemblyVersion(" 1.4.10.300")]并且仅限于版本号,意思是之前的使用文本文件(1.4.10.301)中的新版本号更新globalassembly.cs文件的构建。

试过这个:

$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")]

如何在不删除整个文件内容的情况下更新该行?

2 个答案:

答案 0 :(得分:1)

获得包含AssemblyVersion属性的行后,您可以使用named capture group获取版本字段,如下所示:

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

实际模式:(\d+\.?){4}匹配四个连续出现的一个或多个数字和一个可选点 - (?<version>)部分确保将其捕获到$Matches["version"]

答案 1 :(得分:0)

找到答案,显然你必须使用带括号的Get-Content命令,如下所示:

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

此链接有助于:https://stackoverflow.com/a/17145810/4333722