2016-03-24 13 views
7

私はAssemblyInfo.csファイルからAssemblyVersionを更新するために(テスト中のみ)正規表現を使用しています。しかし、私は、.csファイル自体からこの値を引き出して置き換える最良の方法は何でしょうか?AssemblyInfo.csからAssemblyVersionを取得して置き換える

明らかに、動作していないが、一般的なアイデアが整っている私の最高の推測です。もう少しエレガントなものを望んでいた。要求ごと

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)) 
    } 
} 

EDIT

ここで私はAssemblyInfoに更新しているよラインです:

[assembly: AssemblyVersion("1.0.0.0")] 
+0

投稿に「AssemblyVersion」行を追加しました – NealR

答えて

15

は本当にあなたの正規表現を変更しようとするが、あなた表示されたくありませんあなたが試みることができるものの流れ。

$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 

各行ごとに実行し、一致する行があるかどうかを確認します。一致が見つかると、バージョンは[version]タイプとして保存されます。これを使用して、必要に応じてバージョンを更新します。更新された行を出力します。不一致の行はそのまま出力されます。

ファイルが読み込まれ、角括弧内にあるため、パイプラインが処理を開始する前にハンドルが閉じられます。これにより、同じファイルに書き戻すことができます。ループの各パスは1行を出力し、set-contentに送信されてファイルに書き戻されます。


あなたは-containsとして期待通り$var -contains "AssemblyVersion"が働いていないことに注意してくださいは、配列演算子です。 -matchは、正規表現をサポートする演算子であることがわかっている限り、メタ文字には注意が必要です。 -like "*AssemblyVersion*"も機能し、シンプルなワイルドカードをサポートします。

+1

うわー、これは完璧です。 PowerShellがメジャー/マイナーなどのファイルバージョンにアクセスできることはわかっていませんでした。ありがとう!!! – NealR

+0

@NealRこれは、私の別の答えからの部分的なものです:http://stackoverflow.com/questions/30195025/increment-version-in-a-text-file/30195294#30195294タイプは読み取り専用のプロパティです。 – Matt

+0

偉大な答えは、ありがとう。私はいくつかの問題に対処するためにいくつか修正を加えました - [gist](https://gist.github.com/blakeja/5655fe2ac52ff26fdec9ffa481c18dd9)。具体的には、正規表現に開始/終了アンカーを追加し、*文字を使用するバージョンを処理し、明示的に指定されたUTF-8エンコーディングでファイルを読み書きします。 –

関連する問題