通过 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"
|