Skip to content

An unhandled error has occurred on dotnet 11 preview 3 #16340

@LeftTwixWand

Description

@LeftTwixWand

Is there an existing issue for this?

  • I have searched the existing issues

Describe the bug

Image

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:

  1. 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.

  1. 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.

  1. 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

Metadata

Metadata

Assignees

No one assigned

    Type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions