实现 .NET 10 托盘版网关保活

包含分层探测、可补偿的 IPv4 路由/DNS 切换、自动策略、托盘与分组设置界面、只读诊断工具、离线测试和发布脚本。
This commit is contained in:
chuzhongzai
2026-10-23 23:35:20 +08:00
parent 59a2982b2c
commit 2d85527656
57 changed files with 8623 additions and 0 deletions
+37
View File
@@ -0,0 +1,37 @@
param(
[switch]$Test,
[switch]$Publish,
[switch]$SelfContained
)
$ErrorActionPreference = 'Stop'
$sdkCandidate = Join-Path $env:USERPROFILE '.dotnet-sdk\dotnet.exe'
$dotnet = if ($env:GATEWAY_DOTNET) { $env:GATEWAY_DOTNET } elseif (Test-Path -LiteralPath $sdkCandidate) { $sdkCandidate } else { (Get-Command dotnet -ErrorAction Stop).Source }
$previousRoot = $env:DOTNET_ROOT
$previousTelemetry = $env:DOTNET_CLI_TELEMETRY_OPTOUT
try {
$env:DOTNET_ROOT = Split-Path -Parent $dotnet
$env:DOTNET_CLI_TELEMETRY_OPTOUT = '1'
& $dotnet build (Join-Path $PSScriptRoot 'GatewayKeepalive.sln') -c Release --nologo
if ($LASTEXITCODE -ne 0) { throw '构建失败。' }
if ($Test) {
foreach ($project in @('GatewayKeepalive.Tests', 'GatewayKeepalive.ProbeTests')) {
& $dotnet run --project (Join-Path $PSScriptRoot "tests\$project\$project.csproj") -c Release --no-build
if ($LASTEXITCODE -ne 0) { throw "$project 验证失败。" }
}
}
if ($Publish) {
$flavor = if ($SelfContained) { 'standalone' } else { 'runtime-dependent' }
$destination = Join-Path $PSScriptRoot "artifacts\publish\$flavor"
$contained = if ($SelfContained) { 'true' } else { 'false' }
& $dotnet publish (Join-Path $PSScriptRoot 'src\GatewayKeepalive.Tray\GatewayKeepalive.Tray.csproj') -c Release -r win-x64 --self-contained $contained -p:PublishSingleFile=true -p:IncludeNativeLibrariesForSelfExtract=true -p:DebugType=embedded -o $destination
if ($LASTEXITCODE -ne 0) { throw '托盘版发布失败。' }
$cli = Join-Path $destination 'diagnostics'
& $dotnet publish (Join-Path $PSScriptRoot 'src\GatewayKeepalive.Cli\GatewayKeepalive.Cli.csproj') -c Release -r win-x64 --self-contained $contained -p:PublishSingleFile=true -p:IncludeNativeLibrariesForSelfExtract=true -p:DebugType=embedded -o $cli
if ($LASTEXITCODE -ne 0) { throw '只读诊断工具发布失败。' }
Write-Host "发布完成:$destination"
}
}
finally {
$env:DOTNET_ROOT = $previousRoot
$env:DOTNET_CLI_TELEMETRY_OPTOUT = $previousTelemetry
}