Files
Thing/ThingHK/build.ps1
T
2026-07-24 18:16:34 +08:00

79 lines
2.5 KiB
PowerShell

<#
.SYNOPSIS
ThingHK Native AOT build script.
.DESCRIPTION
Builds ThingHK as Native AOT single-file executable and copies it to src-tauri/binaries/ for Tauri packaging.
Usage: run .\build.ps1 in the ThingHK/ directory.
#>
[CmdletBinding()]
param(
[string]$Configuration = "Release",
[string]$Runtime = "win-x64"
)
$ErrorActionPreference = "Stop"
# Resolve script directory: try multiple methods for compatibility
$scriptDir = $PSScriptRoot
if (-not $scriptDir) {
$cmd = $MyInvocation.MyCommand
if ($cmd -and $cmd.Path) {
$scriptDir = Split-Path -Parent $cmd.Path
}
}
if (-not $scriptDir) {
$scriptDir = (Get-Location).Path
}
$projectPath = Join-Path $scriptDir "ThingHK.csproj"
$publishDir = Join-Path $scriptDir "bin\$Configuration\net8.0-windows\$Runtime\publish"
$destDir = Join-Path $scriptDir "..\src-tauri\binaries"
$destPath = Join-Path $destDir "ThingHK.exe"
Write-Host "=== ThingHK Build Started ===" -ForegroundColor Cyan
Write-Host "Config: $Configuration | Runtime: $Runtime"
Write-Host "Project: $projectPath"
Write-Host "ScriptDir: $scriptDir"
if (-not (Test-Path $projectPath)) {
Write-Error "Project file not found: $projectPath"
exit 1
}
# 1. Clean old obj cache
$objDir = Join-Path $scriptDir "obj"
if (Test-Path $objDir) {
Write-Host "`n[1/4] Cleaning obj cache..." -ForegroundColor Yellow
Remove-Item $objDir -Recurse -Force -ErrorAction SilentlyContinue
}
# 2. dotnet publish (Native AOT)
Write-Host "`n[2/4] Running dotnet publish (Native AOT)..." -ForegroundColor Yellow
& dotnet publish $projectPath -c $Configuration -r $Runtime
if ($LASTEXITCODE -ne 0) {
Write-Error "dotnet publish failed (exit $LASTEXITCODE)"
exit $LASTEXITCODE
}
$publishedExe = Join-Path $publishDir "ThingHK.exe"
if (-not (Test-Path $publishedExe)) {
Write-Error "Build output not found: $publishedExe"
exit 1
}
# 3. Ensure destination directory exists
if (-not (Test-Path $destDir)) {
Write-Host "`n[3/4] Creating destination: $destDir" -ForegroundColor Yellow
New-Item -ItemType Directory -Path $destDir -Force | Out-Null
}
# 4. Copy to src-tauri/binaries/
Write-Host "`n[4/4] Copying to $destPath" -ForegroundColor Yellow
Copy-Item $publishedExe $destPath -Force
$destItem = Get-Item $destPath
Write-Host "`n=== Build Complete ===" -ForegroundColor Green
Write-Host ("Output: {0}" -f $destItem.FullName)
Write-Host ("Size: {0:N2} MB" -f ($destItem.Length / 1MB))
Write-Host ("Time: {0}" -f $destItem.LastWriteTime)