Files
Htmx/Testing/AOT/build-aot.ps1
T

123 lines
4.4 KiB
PowerShell

# AOT Build and Test Script for Windows PowerShell
# This script builds the Htmx.ApiDemo application with AOT compilation enabled
# and runs the application to check for trimming issues
param(
[switch]$RunOnly,
[switch]$BuildOnly
)
# Set error handling
$ErrorActionPreference = "Stop"
# Define paths
$ProjectRoot = Split-Path -Parent (Split-Path -Parent $PSScriptRoot)
$ApiDemoProject = Join-Path $ProjectRoot "Htmx.ApiDemo"
$PublishPath = Join-Path $PSScriptRoot "Publish"
Write-Host "========================================" -ForegroundColor Cyan
Write-Host "AOT Build and Test Script" -ForegroundColor Cyan
Write-Host "========================================" -ForegroundColor Cyan
Write-Host ""
if (-not $RunOnly) {
Write-Host "Starting AOT Build Process..." -ForegroundColor Yellow
Write-Host "Project Path: $ApiDemoProject" -ForegroundColor Gray
Write-Host "Publish Path: $PublishPath" -ForegroundColor Gray
Write-Host ""
# Kill any running instance of the app before cleaning (it locks the publish folder)
$AppName = "Htmx.ApiDemo"
$Running = Get-Process -Name $AppName -ErrorAction SilentlyContinue
if ($Running) {
Write-Host "Stopping running instance of $AppName..." -ForegroundColor Yellow
$Running | Stop-Process -Force
Start-Sleep -Milliseconds 500
}
# Clean previous publish folder if it exists
if (Test-Path $PublishPath) {
Write-Host "Cleaning previous publish folder..." -ForegroundColor Yellow
Remove-Item -Path $PublishPath -Recurse -Force
}
# Create publish folder
New-Item -Path $PublishPath -ItemType Directory -Force | Out-Null
try {
# Run dotnet publish with AOT enabled
# PublishAot=true is already set in the .csproj
# A Runtime Identifier (RID) is required for AOT compilation
Write-Host "Publishing with AOT compilation enabled (win-x64)..." -ForegroundColor Yellow
Push-Location $ApiDemoProject
dotnet publish -c Release -r win-x64 -o $PublishPath `
-p:DebugSymbols=false `
-p:DebugType=none
if ($LASTEXITCODE -ne 0) {
Write-Host "Build failed!" -ForegroundColor Red
Pop-Location
exit 1
}
Pop-Location
Write-Host "AOT build completed successfully!" -ForegroundColor Green
Write-Host ""
# Copy appsettings.Development.json over appsettings.json in the publish folder
# so the AOT executable has the correct connection strings for local testing
$DevSettings = Join-Path $ApiDemoProject "appsettings.Development.json"
$PublishedSettings = Join-Path $PublishPath "appsettings.json"
if (Test-Path $DevSettings) {
Write-Host "Copying appsettings.Development.json -> appsettings.json in publish folder..." -ForegroundColor Yellow
Copy-Item -Path $DevSettings -Destination $PublishedSettings -Force
Write-Host "Done." -ForegroundColor Green
Write-Host ""
} else {
Write-Host "Warning: appsettings.Development.json not found, skipping copy." -ForegroundColor DarkYellow
}
}
catch {
Write-Host "Error during build: $_" -ForegroundColor Red
Pop-Location
exit 1
}
}
if (-not $BuildOnly) {
Write-Host "Starting Application..." -ForegroundColor Yellow
Write-Host ""
# Find the executable
$Executable = Get-ChildItem -Path $PublishPath -Filter "*.exe" -Recurse | Select-Object -First 1
if (-not $Executable) {
Write-Host "Executable not found in publish directory!" -ForegroundColor Red
exit 1
}
Write-Host "Running: $($Executable.FullName)" -ForegroundColor Yellow
Write-Host "Press Ctrl+C to stop the application" -ForegroundColor Gray
Write-Host ""
try {
# Use Start-Process with WorkingDirectory so appsettings.json is found,
# and the shell CWD is never changed (safe against Ctrl+C)
$proc = Start-Process -FilePath $Executable.FullName `
-WorkingDirectory $PublishPath `
-NoNewWindow `
-PassThru
$proc.WaitForExit()
}
catch {
Write-Host "Error running application: $_" -ForegroundColor Red
exit 1
}
}
Write-Host ""
Write-Host "========================================" -ForegroundColor Cyan
Write-Host "AOT Test Complete" -ForegroundColor Cyan
Write-Host "========================================" -ForegroundColor Cyan