Summary
On an ARM64 Windows dev box where the working tree lives under a OneDrive "cloud files" path, dotnet build Reactor.slnx -c Release fails for ~16 WinUI app projects across the solution. This is a pre-existing developer-ergonomics gap, not a product or CI defect:
Root cause
The WinUI native build toolchain shipped in Microsoft.WindowsAppSDK.WinUI 2.0.12 has no ARM64-native variant:
XamlCompiler.exe is x86 / .NET Framework 4.7.2 (the tools\arm64|x64|x86 dirs ship only GenXbf.dll, not the compiler). dotnet build always invokes it out-of-process (UseXamlCompilerExecutable defaults true on Core).
- Under x86 emulation on ARM64, the compiler (and the MakePri/PRI indexer for non-XAML WinUI apps) cannot read build inputs that live under the OneDrive "cloud files" reparse path → the tool exits 1.
Surfaced errors:
MSB3073 — XamlCompiler.exe ... exited with code 1 (XAML-bearing apps).
APPX0002 / PRI180 / PRI210 (e.g. 0x80070003 File move failed) — MakePri/PRI indexer (non-XAML WinUI apps that reference src/Reactor/Reactor.csproj).
Discriminator is the ARM64 host, not the project Platform: -p:Platform=x64 on an ARM64 host fails identically. Relocating the tree fully off OneDrive makes the same emulated executable succeed.
This matches the existing ENV NOTE that the full .slnx build does not work on this ARM64 box.
Affected projects (build-fine on x64/CI)
tests/stress_perf/StressPerf.ReactorOptimized — PRI210
tests/stress_perf/StressPerf.Direct — MSB3073
- other
tests/stress_perf/StressPerf.* variants (Bound / DirectX / VirtualList.WinUI / …)
samples/apps/demo-script-tool
samples/apps/wct-controls
samples/ReactorHostControlDemo
tests/aot_trim_proof/* (2 projects)
tests/external_proof/Reactor.External.TestControl
tests/Reactor.AppTests.ThirdPartyControls
tests/Reactor.WinFormsTests.Host
(Plus the tests/perf_bench/** WinUI apps already addressed by #684.)
Possible eventual fix (deliberate, separately reviewed — NOT a rider on #684)
PR #684 introduces a host-architecture skip gate for tests/perf_bench/** WinUI app executables (gated on RuntimeInformation.OSArchitecture == Arm64, provably off on x64/CI). The same mechanism could be promoted to a broader scope (a repo-root / .slnx-level skip of WinUI app exes on ARM64 hosts) if the team wants whole-solution ARM64 dev-box ergonomics.
That is intentionally out of scope for #684 because it would wrap a host-arch gate around projects on the active /perf critical path (StressPerf.*) for zero CI benefit — it must be a deliberate, separately-reviewed change, not coupled to the perf work mid-cycle.
Deferred docs note
Fold in an ARM64 dev-box build note in docs/guide/performance.md. That page is generated — edit the template under docs/_pipeline/templates/ (e.g. performance.md.dt) and run mur docs compile, not the compiled output. (Deferred from #684 as out of scope; flagged by the PR review.)
Labels
tech-debt applied. A build label would also be apt (the requested label does not currently exist in this repo).
References
Summary
On an ARM64 Windows dev box where the working tree lives under a OneDrive "cloud files" path,
dotnet build Reactor.slnx -c Releasefails for ~16 WinUI app projects across the solution. This is a pre-existing developer-ergonomics gap, not a product or CI defect:windows-latest/ x64).mainis green there.tests/perf_bench/**subset; this issue tracks the rest.Root cause
The WinUI native build toolchain shipped in
Microsoft.WindowsAppSDK.WinUI 2.0.12has no ARM64-native variant:XamlCompiler.exeis x86 / .NET Framework 4.7.2 (thetools\arm64|x64|x86dirs ship onlyGenXbf.dll, not the compiler).dotnet buildalways invokes it out-of-process (UseXamlCompilerExecutabledefaults true on Core).Surfaced errors:
MSB3073—XamlCompiler.exe ... exited with code 1(XAML-bearing apps).APPX0002/PRI180/PRI210(e.g.0x80070003 File move failed) — MakePri/PRI indexer (non-XAML WinUI apps that referencesrc/Reactor/Reactor.csproj).Discriminator is the ARM64 host, not the project
Platform:-p:Platform=x64on an ARM64 host fails identically. Relocating the tree fully off OneDrive makes the same emulated executable succeed.Affected projects (build-fine on x64/CI)
tests/stress_perf/StressPerf.ReactorOptimized— PRI210tests/stress_perf/StressPerf.Direct— MSB3073tests/stress_perf/StressPerf.*variants (Bound / DirectX / VirtualList.WinUI / …)samples/apps/demo-script-toolsamples/apps/wct-controlssamples/ReactorHostControlDemotests/aot_trim_proof/*(2 projects)tests/external_proof/Reactor.External.TestControltests/Reactor.AppTests.ThirdPartyControlstests/Reactor.WinFormsTests.Host(Plus the
tests/perf_bench/**WinUI apps already addressed by #684.)Possible eventual fix (deliberate, separately reviewed — NOT a rider on #684)
PR #684 introduces a host-architecture skip gate for
tests/perf_bench/**WinUI app executables (gated onRuntimeInformation.OSArchitecture == Arm64, provably off on x64/CI). The same mechanism could be promoted to a broader scope (a repo-root /.slnx-level skip of WinUI app exes on ARM64 hosts) if the team wants whole-solution ARM64 dev-box ergonomics.That is intentionally out of scope for #684 because it would wrap a host-arch gate around projects on the active
/perfcritical path (StressPerf.*) for zero CI benefit — it must be a deliberate, separately-reviewed change, not coupled to the perf work mid-cycle.Deferred docs note
Fold in an ARM64 dev-box build note in
docs/guide/performance.md. That page is generated — edit the template underdocs/_pipeline/templates/(e.g.performance.md.dt) and runmur docs compile, not the compiled output. (Deferred from #684 as out of scope; flagged by the PR review.)Labels
tech-debtapplied. Abuildlabel would also be apt (the requested label does not currently exist in this repo).References