<# .SYNOPSIS Builds every plugin engine in this repo and deploys it to the OpenNest benchmark. .DESCRIPTION OpenNest.Benchmark loads plugin engines from an Engines/ folder next to its own build output. This builds the benchmark in the OpenNest checkout plus each OpenNest.Engine.*/ project here (test subprojects are skipped) and copies each engine DLL into that folder. .EXAMPLE ./Build-Engines.ps1 ./Build-Engines.ps1 -Engines MyEngine -Configuration Debug ./Build-Engines.ps1 -OpenNestRoot D:/src/OpenNest #> param( [string]$Configuration = 'Release', # Engine names without the OpenNest.Engine. prefix; default is all of them. [string[]]$Engines, # OpenNest checkout to build against; defaults to a sibling clone (../OpenNest). [string]$OpenNestRoot = (Join-Path (Split-Path $PSScriptRoot -Parent) 'OpenNest') ) $ErrorActionPreference = 'Stop' if (-not (Test-Path (Join-Path $OpenNestRoot 'OpenNest.Benchmark/OpenNest.Benchmark.csproj'))) { throw "OpenNest checkout not found at '$OpenNestRoot'. Clone https://git.thecozycat.net/aj/OpenNest.git next to this repo or pass -OpenNestRoot." } $OpenNestRoot = (Resolve-Path $OpenNestRoot).Path dotnet build (Join-Path $OpenNestRoot 'OpenNest.Benchmark/OpenNest.Benchmark.csproj') -c $Configuration if ($LASTEXITCODE -ne 0) { throw 'OpenNest.Benchmark build failed.' } $deployDir = Join-Path $OpenNestRoot "OpenNest.Benchmark/bin/$Configuration/net8.0/Engines" New-Item -ItemType Directory -Force $deployDir | Out-Null $projects = Get-ChildItem $PSScriptRoot -Directory -Filter 'OpenNest.Engine.*' | Where-Object { -not $Engines -or $Engines -contains $_.Name.Substring('OpenNest.Engine.'.Length) } foreach ($dir in $projects) { $csproj = Join-Path $dir.FullName "$($dir.Name).csproj" dotnet build $csproj -c $Configuration "-p:OpenNestRoot=$OpenNestRoot/" if ($LASTEXITCODE -ne 0) { throw "$($dir.Name) build failed." } $dll = Join-Path $dir.FullName "bin/$Configuration/net8.0/$($dir.Name).dll" Copy-Item $dll $deployDir -Force Write-Host "Deployed $($dir.Name) -> $deployDir" }