我有我使用(仅测试)来更新一个正则表达式AssemblyVersion从AssemblyInfo.cs文件.但是,我想知道从.cs文件中提取和替换此值的最佳方法是什么?
这是我最好的猜测,显然,它不起作用,但总体思路已经到位.希望有点优雅的东西.
Get-Content $file | Foreach-Object{
$var = $_
if($var -contains "AssemblyVersion"){
$temp = [regex]::match($s, '"([^"]+)"').Groups[1].Value.Substring(0, $prog.LastIndexOf(".")+1) + 1234
$var = $var.SubString(0, $var.FirstIndexOf('"') + $temp + $var.SubString($var.LastIndexOf('"'), $var.Length-1))
}
}
Run Code Online (Sandbox Code Playgroud)
编辑
这里的每个请求是我要在AssemblyInfo中更新的行:
[assembly: AssemblyVersion("1.0.0.0")]
Run Code Online (Sandbox Code Playgroud)
Mat*_*att 31
并不是真的想要改变你的正则表达式,而是想向你展示你可以尝试的流程.
$path = "C:\temp\test.txt"
$pattern = '\[assembly: AssemblyVersion\("(.*)"\)\]'
(Get-Content $path) | ForEach-Object{
if($_ -match $pattern){
# We have found the matching line
# Edit the version number and put back.
$fileVersion = [version]$matches[1]
$newVersion = "{0}.{1}.{2}.{3}" -f $fileVersion.Major, $fileVersion.Minor, $fileVersion.Build, ($fileVersion.Revision + 1)
'[assembly: AssemblyVersion("{0}")]' -f $newVersion
} else {
# Output line as is
$_
}
} | Set-Content $path
Run Code Online (Sandbox Code Playgroud)
为每一行运行并检查匹配的行是否存在.找到匹配项后,版本将存储为[version]类型.使用它我们根据需要更新版本.然后输出更新的行.不匹配的行只是按原样输出.
读入该文件,因为它在括号中,所以句柄在管道开始处理之前关闭.这让我们回写到同一个文件.循环中的每个传递输出一行,然后发送该行set-content以写回文件.
请注意,$var -contains "AssemblyVersion"这不会像预期的那样工作,因为它-contains是一个数组运算符.-match只要你知道它是一个正则表达式支持运算符就更好了,所以要小心元字符.-like "*AssemblyVersion*"也可以工作并支持简单的通配符.
| 归档时间: |
|
| 查看次数: |
10519 次 |
| 最近记录: |