Is there an existing issue for this?
Describe the bug
Expected Behavior
From my findings: Aspire dashboard is not just an ASP.NET server — it's a pre-compiled Blazor WebAssembly app
shipped inside the Aspire.Dashboard NuGet. Baked into it are:
- blazor.webassembly.js + blazor.web.js
- dotnet.js, dotnet.runtime.js, dotnet.native.js, dotnet.native.wasm
- Managed assemblies compiled against .NET 10
- A static-web-assets manifest with fingerprinted hashes matching the above
Blazor WASM requires all of these files + the hosting runtime to agree on the same framework
version. They can't cross a major-version boundary. When the AppHost process runs on .NET 11
preview, three things diverge at once:
- HotReload package is auto-injected at the SDK's version
The SDK (since net10) implicitly adds Microsoft.DotNet.HotReload.WebAssembly.Browser to any WASM app
at version $(NETCoreSdkVersion). With SDK 11.0.100-preview.3 installed, that resolves to 11.0.x —
even for the dashboard, which was built against net10. The 11.0 hot-reload JS expects an 11.0 Mono
WASM runtime. You get the exact error documented in
dotnet/aspnetcore#65261:
Failed to start platform. Reason: RuntimeError: memory access out of bounds
Fix landed in dotnet/sdk#52816 (hot-reload moved from NuGet ref → built-in
SDK tool), verified on preview.2. Preview 3 carries that fix — but only for apps you compile. The
Aspire dashboard is pre-compiled; the SDK-level fix can't retroactively change the dashboard's baked
assets.
- Blazor WASM bootstrap changed shape in .NET 11
Per the .NET 11 Blazor release notes: blazor.webassembly.js now accepts the blazor.web.js-style
options format, the Mono WASM runtime init path was reworked, and there's a new BasePath component /
GetUriWithHash pipeline. The runtime-side JS expects the new shape; the dashboard's baked net10 JS
emits the old shape. Cross-version boot fails silently on some paths, loudly on others.
- Static web assets fingerprinting
dotnet.js hashing and the SWA manifest format shift between versions
(dotnet/aspnetcore#61425). The dashboard's manifest points at net10
hashes; the runtime serves net11 file layouts. Mismatch → 404s or version-mismatch warnings →
dashboard can't complete bootstrap.
Steps To Reproduce
testapp.zip
Exceptions (if any)
blazor.web.js:1 [2026-04-20T16:21:27.551Z] Information: Normalizing '_blazor' to 'https://localhost:17098/_blazor'.
content-script.js:22 Document already loaded, running initialization immediately
content-script.js:4 Attempting to initialize AdUnit
content-script.js:6 AdUnit initialized successfully
blazor.web.js:1 [2026-04-20T16:21:27.829Z] Information: WebSocket connected to wss://localhost:17098/_blazor?id=ZjFhlOONHY_l29h5UqNvMw.
installHook.js:1 [2026-04-20T16:21:28.027Z] Error: Microsoft.JSInterop.JSException: The value 'Blazor._internal.Virtualize.refreshObservers' is not a function.
Error: The value 'Blazor._internal.Virtualize.refreshObservers' is not a function.
at https://localhost:17098/framework/blazor.web.js:1:510
at h.resolveInvocationHandler (https://localhost:17098/framework/blazor.web.js:1:1420)
at S (https://localhost:17098/framework/blazor.web.js:1:6395)
at w.processJSCall (https://localhost:17098/framework/blazor.web.js:1:4386)
at w.beginInvokeJSFromDotNet (https://localhost:17098/framework/blazor.web.js:1:4071)
at _n._invokeClientMethod (https://localhost:17098/framework/blazor.web.js:1:67466)
at _n._processIncomingData (https://localhost:17098/framework/blazor.web.js:1:64855)
at Nn.onreceive (https://localhost:17098/framework/blazor.web.js:1:58496)
at WebSocket.<anonymous> (https://localhost:17098/framework/blazor.web.js:1:82444)
at Microsoft.JSInterop.JSRuntime.InvokeAsync[TValue](Int64 targetInstanceId, String identifier, JSCallType callType, Object[] args)
at Microsoft.JSInterop.JSRuntimeExtensions.InvokeVoidAsync(IJSRuntime jsRuntime, String identifier, Object[] args)
at Microsoft.AspNetCore.Components.Web.Virtualization.Virtualize`1.OnAfterRenderAsync(Boolean firstRender)
at Microsoft.AspNetCore.Components.RenderTree.Renderer.GetErrorHandledTask(Task taskToHandle, ComponentState owningComponentState)
overrideMethod @ installHook.js:1
log @ blazor.web.js:1
unhandledError @ blazor.web.js:1
(anonymous) @ blazor.web.js:1
_invokeClientMethod @ blazor.web.js:1
_processIncomingData @ blazor.web.js:1
(anonymous) @ blazor.web.js:1
(anonymous) @ blazor.web.js:1
blazor.web.js:1 [2026-04-20T16:21:28.028Z] Information: Connection disconnected.
Aspire doctor output
Aspire Environment Check
.NET SDK
✔ .NET 11.0.100-preview.3.26207.106 installed (x64)
Container Runtime
✔ Docker v29.3.1: running (auto-detected (default)) ← active
Environment
✔ HTTPS development certificate is trusted
Summary: 3 passed, 0 warnings, 0 failed
Anything else?
No response
Is there an existing issue for this?
Describe the bug
Expected Behavior
From my findings: Aspire dashboard is not just an ASP.NET server — it's a pre-compiled Blazor WebAssembly app
shipped inside the Aspire.Dashboard NuGet. Baked into it are:
Blazor WASM requires all of these files + the hosting runtime to agree on the same framework
version. They can't cross a major-version boundary. When the AppHost process runs on .NET 11
preview, three things diverge at once:
The SDK (since net10) implicitly adds Microsoft.DotNet.HotReload.WebAssembly.Browser to any WASM app
at version $(NETCoreSdkVersion). With SDK 11.0.100-preview.3 installed, that resolves to 11.0.x —
even for the dashboard, which was built against net10. The 11.0 hot-reload JS expects an 11.0 Mono
WASM runtime. You get the exact error documented in
dotnet/aspnetcore#65261:
Failed to start platform. Reason: RuntimeError: memory access out of bounds
Fix landed in dotnet/sdk#52816 (hot-reload moved from NuGet ref → built-in
SDK tool), verified on preview.2. Preview 3 carries that fix — but only for apps you compile. The
Aspire dashboard is pre-compiled; the SDK-level fix can't retroactively change the dashboard's baked
assets.
Per the .NET 11 Blazor release notes: blazor.webassembly.js now accepts the blazor.web.js-style
options format, the Mono WASM runtime init path was reworked, and there's a new BasePath component /
GetUriWithHash pipeline. The runtime-side JS expects the new shape; the dashboard's baked net10 JS
emits the old shape. Cross-version boot fails silently on some paths, loudly on others.
dotnet.js hashing and the SWA manifest format shift between versions
(dotnet/aspnetcore#61425). The dashboard's manifest points at net10
hashes; the runtime serves net11 file layouts. Mismatch → 404s or version-mismatch warnings →
dashboard can't complete bootstrap.
Steps To Reproduce
testapp.zip
Exceptions (if any)
Aspire doctor output
Aspire Environment Check
.NET SDK
✔ .NET 11.0.100-preview.3.26207.106 installed (x64)
Container Runtime
✔ Docker v29.3.1: running (auto-detected (default)) ← active
Environment
✔ HTTPS development certificate is trusted
Summary: 3 passed, 0 warnings, 0 failed
Anything else?
No response