通过 Protocol Buffer 配置文件自动生成 CSharp 文件的 PowerShell 程序

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
# 用于把几个文件夹下的proto文件自动生成cs文件,该文件与ProtoGen.exe放在一起

$folders = "define","map","message"
$exePath = Get-Location

$Utf8NoBomEncoding = New-Object System.Text.UTF8Encoding($False)

for($i = 0; $i -lt $folders.Length; ++$i)
{
    Write-Output "Folder "$folders[$i]

    Set-Location -Path ..
    Set-Location $folders[$i]

    $fileList = Get-ChildItem -File -Filter "*.proto"

    foreach ($file in $fileList)
    {
        Write-Output "Generating file " $file "..."

        # add temp content to file
        #$FileOriginal = Get-Content $file

        $optSet = $FALSE

        # ReadAllLines return FileInfo object
        $FileOriginal = [System.IO.File]::ReadAllLines($file.FullName, $Utf8NoBomEncoding)
        [String[]] $FileModified = @()
        Foreach ($Line in $FileOriginal)
        {
            $FileModified += $Line
            if(-not $optSet -and $Line -match "Package")
            {
                $FileModified += ""
                $FileModified += "option optimize_for = LITE_RUNTIME;"

                $optSet = $TRUE
            }
        }

        #Set-Content $file $FileModified
        [System.IO.File]::WriteAllLines($file.FullName, $FileModified, $Utf8NoBomEncoding)

        # generate
        &$exePath"\ProtoGen.exe" $file

        # recover file content
        #Set-Content $file $FileOriginal -Encoding UTF8
        [System.IO.File]::WriteAllLines($file.FullName, $FileOriginal, $Utf8NoBomEncoding)

        Write-Output "Done."
    }

    Set-Location $exePath
}

Read-Host -Prompt "Press Enter to exit"