Skip to content

ARM64 dev-box: whole-solution build fails for WinUI app projects under OneDrive (x86-emulated XamlCompiler/MakePri) — pre-existing, x64/CI-green #686

Description

@azchohfi

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:

  • MSB3073XamlCompiler.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

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions