【问题标题】:Update globalassemblyinfo.cs with a dynamic file使用动态文件更新 globalassemblyinfo.cs
【发布时间】:2015-05-13 11:40:39
【问题描述】:

我得到一个带有版本号的文本文件,该版本号会在每次构建时更新,即: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")]

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

【问题讨论】:

  • 不要发表评论。编辑您的问题。

标签: powershell versioning assemblyinfo


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-08-04
      • 2018-05-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-22
      • 1970-01-01
      • 2020-08-19
      相关资源
      最近更新 更多