$ the-wire · showcase
Managed ilasm reaches parity, Roslyn telemetry goes instance-based
By RepoJournal · Filed · About .NET · Composed from the cited sources · methodology
Roslyn's managed ilasm now matches native ilasm across 2,868 ilproj test files, while the compiler platform lays groundwork for per-server telemetry in LSP daemon mode.
Managed ilasm (`src/tools/ilasm`) has been brought to near-parity with the native ilasm across 2,868 ilproj test files, starting from roughly 2,128 failures and reducing real (non-cosmetic) differences to zero actionable items [1][2]. The change spans 53 commits, 23 files, and +12,035 / -6,617 lines, including ANTLR grammar fixes for `.language`, `.line` (QSTRING support), and `value`/`instance` keywords in identifiers [2]. This is a breaking change for anyone relying on the managed ilasm's previous failure surface, but it closes the parity gap with the native tool.
Roslyn made `RoslynTelemetry` instance-based with an ambient `Current`, a pure, behavior-preserving refactor that is PR 1 of 3 [3]. In language-server daemon mode, where one process hosts multiple independent LSP servers, `RoslynTelemetry` currently holds process-wide static sink arrays, so every client's telemetry collapses into one `TelemetrySession` [3]. With nothing calling `SetCurrent`, all telemetry still resolves to one private default instance, preserving today's semantics while laying groundwork for per-server isolation [3].
In nullability analysis, the compiler now uses a non-null initial state for null-resilient properties in constructors [4]. The rule: do not share a slot when the property is null-resilient, because there is no strong connection between the property's and field's flow states and the field's value does not affect the get accessor's nullability [4]. This lets the analysis use the property's type instead of the field's type [4]. Separately, two Razor decl/impl split fallbacks were reduced by handling header-directive and `@inject` components, common shapes that were needlessly falling back to the slower separate-declaration-engine discovery [5].
On the runtime side, the browser-wasm CoreCLR `R2R_CG2` runtime-test job returns to the default `runtime` pipeline, continuing on error and staying out of the shared Helix monitor so known product failures remain visible without blocking unrelated PRs [6]. The temporary manual-pipeline implementation from #133308 is removed [6]. Two smaller fixes: the desktop certificate-context ownership test now requires `TargetsMobile` to be false, excluding tvOS and other mobile builds that were reaching an OpenSSL-specific path with an Apple ECDSA key [7]; and cryptography folder-specific instructions now cover all `System.Security.Cryptography*` libraries, `Microsoft.Bcl.Cryptography`, and shared cryptography source and tests [8].
Action items
- → Verify your managed ilasm output against native ilasm after the parity fixes dotnet/runtime [plan]
- → Monitor Roslyn telemetry refactor if you host multiple LSP servers in daemon mode dotnet/roslyn [monitor]
- → Upgrade Microsoft.Extensions.Logging to 10.0.12 in dotnet/iot dotnet/iot [plan]
References
- [1] Managed ilasm: comprehensive parity fixes with native ilasm (#131507) ↗ dotnet/runtime
- [2] Managed ilasm: comprehensive parity fixes with native ilasm ↗ dotnet/runtime
- [3] Make RoslynTelemetry instance-based with an ambient Current ↗ dotnet/roslyn
- [4] Use non-null initial state for null-resilient properties in constructors ↗ dotnet/roslyn
- [5] Reduce decl/impl split fallbacks: split header-directive and @inject components ↗ dotnet/roslyn
- [6] Restore non-blocking browser WASM R2R runtime tests (#133463) ↗ dotnet/runtime
- [7] Exclude desktop certificate context test from mobile builds (#133404) ↗ dotnet/runtime
- [8] Expand cryptography instruction scope (#133212) ↗ dotnet/runtime