使用动态文件更新 globalassemblyinfo.cs

Update globalassemblyinfo.cs with a dynamic file

我得到了一个带有版本号的文本文件,它在每次构建时都会更新,即:1.4.10.301。

我想在每个构建中将此编号插入到我的 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")]

如何只更新行而不删除整个文件内容?

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

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

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

找到答案,显然你必须像这样使用带括号的 Get-Content 命令:

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

这 link 帮助了: