Skip to content

Conversation

@tmat
Copy link
Member

@tmat tmat commented Oct 9, 2025

Do not call the runtime to apply empty deltas. The change applies the same condition we use in 10.0 to 9.0.

Description

The 9.0 runtime does not ignore empty deltas -- the change to ignore them was only implemented in .NET 10: dotnet/runtime#120333.

When debugging WASM app with the new WASM ICoreDebug-based debugger, the debugger applies deltas and the agent is sent empty deltas. The expectation is that the deltas are ignored and the only action that the agent performs is invoking metadata update handlers.

If the deltas are not skipped in this scenario the 9.0 runtime throws an exception:
"Applying deltas through the debugger and System.Reflection.Metadata.MetadataUpdater.ApplyUpdate simultaneously is not supported"

If we didn't call the agent at all the deltas would be correctly applied by the new WASM debugger but the metadata update handlers wouldn't be executed and thus the app wouldn't function properly (caches not invalidated, UI not refreshed).

Fixes https://devdiv.visualstudio.com/DevDiv/_workitems/edit/2571149

Customer Impact

Hot Reload is broken for customers debugging WASM projects from Visual Studio 2026 using the new ICorDebug-based WASM debugger and projects targeting net9.0.

Regression?

  • Yes
  • No

Partial regression: Previous versions of VS did not fail to apply change entirely, but also did not invoke update handlers, which leaves the app in partially-updated state.
Fixing that in VS caused regression in net90 projects because they lack the condition added in this change.

Risk

  • High
  • Medium
  • Low

The condition is trivial and well tested in net10.

Verification

  • Manual (required)
  • Automated

Packaging changes reviewed?

  • Yes
  • No
  • N/A

When servicing release/2.3

  • Make necessary changes in eng/PatchCo

@tmat tmat requested review from Copilot and removed request for Copilot October 9, 2025 19:10
@tmat tmat requested a review from a team as a code owner October 9, 2025 19:10
@dotnet-policy-service dotnet-policy-service bot added this to the 9.0.x milestone Oct 9, 2025
@tmat tmat added this to Servicing Oct 9, 2025
@lewing lewing added Servicing-consider Shiproom approval is required for the issue Servicing-approved Shiproom has approved the issue and removed Servicing-consider Shiproom approval is required for the issue labels Oct 10, 2025
@wtgodbe wtgodbe merged commit 9f57035 into dotnet:release/9.0 Oct 10, 2025
25 checks passed
@dotnet-policy-service dotnet-policy-service bot modified the milestones: 9.0.x, 9.0.11 Oct 10, 2025
This was referenced Nov 11, 2025
github-actions bot pushed a commit to saan800/saansoft-correlationid that referenced this pull request Dec 31, 2025
….Extensions.Logging.Abstractions (#178)

Updated
[Microsoft.AspNetCore.TestHost](https://github.com/dotnet/aspnetcore)
from 9.0.9 to 9.0.11.

<details>
<summary>Release notes</summary>

_Sourced from [Microsoft.AspNetCore.TestHost's
releases](https://github.com/dotnet/aspnetcore/releases)._

## 9.0.11

[Release](https://github.com/dotnet/core/releases/tag/v9.0.11)

## What's Changed
* Update branding to 9.0.11 by @​vseanreesermsft in
dotnet/aspnetcore#63950
* [release/9.0] Update dependencies from dotnet/extensions by
@​dotnet-maestro[bot] in dotnet/aspnetcore#63677
* [release/9.0] Update dependencies from dotnet/arcade by
@​dotnet-maestro[bot] in dotnet/aspnetcore#63678
* [release/9.0] (deps): Bump src/submodules/googletest from `eb2d85e` to
`9706f75` by @​dependabot[bot] in
dotnet/aspnetcore#63894
* [release/9.0] Fixed devtools url used for debug with chrome and edge
by @​github-actions[bot] in
dotnet/aspnetcore#61948
* [release/9.0] (http2): Lower WINDOWS_UPDATE received on (half)closed
stream to stream abortion by @​DeagleGross in
dotnet/aspnetcore#63934
* [release/9.0] Re-quarantine
ServerRoutingTest.NavigationLock_OverlappingNavigationsCancelExistingNavigations_HistoryNavigation
by @​github-actions[bot] in
dotnet/aspnetcore#63956
* [release/9.0] Fix nginx install on mac, linux by @​wtgodbe in
dotnet/aspnetcore#63966
* [Hot Reload] Do not attempt to apply empty deltas. by @​tmat in
dotnet/aspnetcore#63979
* Merging internal commits for release/9.0 by @​vseanreesermsft in
dotnet/aspnetcore#64036
* Revert log level severity for unknown proxy in
ForwardedHeadersMiddleware by @​BrennanConroy in
dotnet/aspnetcore#64091
* Set timeoutInMinutes to 0 for Windows build job by @​vseanreesermsft
in dotnet/aspnetcore#64126


**Full Changelog**:
dotnet/aspnetcore@v9.0.10...v9.0.11

## 9.0.10

[Release](https://github.com/dotnet/core/releases/tag/v9.0.10)

## What's Changed
* Update branding to 9.0.10 by @​vseanreesermsft in
dotnet/aspnetcore#63510
* [9.0] Make duplicate deb/rpm packages so we can sign them with the new
PMC key by @​jkoritzinsky in
dotnet/aspnetcore#63249
* [release/9.0] Extend Unofficial 1ES template in IdentityModel nightly
tests job by @​github-actions[bot] in
dotnet/aspnetcore#63465
* [release/9.0] (deps): Bump src/submodules/googletest from `373af2e` to
`eb2d85e` by @​dependabot[bot] in
dotnet/aspnetcore#63501
* [release/9.0] Quarantine ResponseBody_WriteContentLength_PassedThrough
by @​wtgodbe in dotnet/aspnetcore#63533
* [release/9.0] Update dependencies from dotnet/arcade by
@​dotnet-maestro[bot] in dotnet/aspnetcore#63304
* [release/9.0] [OpenAPI] Use invariant culture for TextWriter by
@​martincostello in dotnet/aspnetcore#62239
* [release/9.0] Update dependencies from dotnet/extensions by
@​dotnet-maestro[bot] in dotnet/aspnetcore#63303
* Unquarantine `RadioButtonGetsResetAfterSubmittingEnhancedForm` by
@​ilonatommy in dotnet/aspnetcore#63556
* [release/9.0] Update dependencies from dotnet/extensions by
@​dotnet-maestro[bot] in dotnet/aspnetcore#63577
* Merging internal commits for release/9.0 by @​vseanreesermsft in
dotnet/aspnetcore#63604
* [release/9.0] Update dependencies from dotnet/arcade by
@​dotnet-maestro[bot] in dotnet/aspnetcore#63648
* backport(9.0): Fix runtime architecture detection logic in ANCM. by
@​DeagleGross in dotnet/aspnetcore#63707


**Full Changelog**:
dotnet/aspnetcore@v9.0.9...v9.0.10

Commits viewable in [compare
view](dotnet/aspnetcore@v9.0.9...v9.0.11).
</details>

Updated
[Microsoft.Extensions.Logging.Abstractions](https://github.com/dotnet/runtime)
from 9.0.9 to 9.0.11.

<details>
<summary>Release notes</summary>

_Sourced from [Microsoft.Extensions.Logging.Abstractions's
releases](https://github.com/dotnet/runtime/releases)._

## 9.0.11

[Release](https://github.com/dotnet/core/releases/tag/v9.0.11)

## What's Changed
* [release/9.0-staging] Fix DefaultIfEmptyIterator.TryGetElementAt
returning default value for out-of-bounds indices by
@​github-actions[bot] in dotnet/runtime#119844
* [release/9.0-staging] Update dependencies from dotnet/cecil by
@​dotnet-maestro[bot] in dotnet/runtime#119981
* [automated] Merge branch 'release/9.0' => 'release/9.0-staging' by
@​github-actions[bot] in dotnet/runtime#119978
* [release/9.0-staging] Add acquire barrier to populate bit reading by
@​github-actions[bot] in dotnet/runtime#119967
* [release/9.0-staging] Bump System.Text.Json toolset version by
@​github-actions[bot] in dotnet/runtime#113385
* [release/9.0-staging] Update dependencies from dotnet/arcade by
@​dotnet-maestro[bot] in dotnet/runtime#120034
* [release/9.0-staging] Update dependencies from dotnet/cecil by
@​dotnet-maestro[bot] in dotnet/runtime#120033
* [release/9.0-staging] Update dependencies from
dotnet/source-build-reference-packages by @​dotnet-maestro[bot] in
dotnet/runtime#120020
* [release/9.0-staging] `UnsafeAccessor` - ambiguous name and signature
match by @​AaronRobinsonMSFT in
dotnet/runtime#120011
* [release/9.0] Bump OSX.12 helix queues to OSX.13 by @​steveisok in
dotnet/runtime#119814
* [release/9.0-staging] Update dependencies from dotnet/arcade by
@​dotnet-maestro[bot] in dotnet/runtime#120128
* [release/9.0-staging] Update dependencies from dotnet/cecil by
@​dotnet-maestro[bot] in dotnet/runtime#120129
* [release/9.0-staging] Update dependencies from
dotnet/source-build-reference-packages by @​dotnet-maestro[bot] in
dotnet/runtime#120106
* [automated] Merge branch 'release/9.0' => 'release/9.0-staging' by
@​github-actions[bot] in dotnet/runtime#120057
* [release/9.0-staging] Update dependencies from dotnet/cecil by
@​dotnet-maestro[bot] in dotnet/runtime#120240
* [release/9.0] [mono] Make the compressed interface bitmap feature
usable by @​BrzVlad in dotnet/runtime#120154
* [release/9.0-staging] Remove an STJ deep nested object test causing
occasional failures by @​github-actions[bot] in
dotnet/runtime#120265
* [release/9.0-staging] Update dependencies from dotnet/hotreload-utils
by @​dotnet-maestro[bot] in
dotnet/runtime#120331
* [release/9.0-staging] Detect if RSA-384 is supported on the platform
by @​vcsjones in dotnet/runtime#120382
* [release/9.0-staging] Load Standalone GC correctly in component
scenarios. by @​github-actions[bot] in
dotnet/runtime#120236
* [release/9.0-staging] [mono][hotreload] Make the runtime ignore an
update if it is an empty one by @​github-actions[bot] in
dotnet/runtime#120335
* [release/9.0-staging] Update dependencies from dotnet/icu by
@​dotnet-maestro[bot] in dotnet/runtime#120349
* [release/9.0-staging] Update dependencies from dotnet/arcade by
@​dotnet-maestro[bot] in dotnet/runtime#120397
* [release/9.0-staging] Update dependencies from dotnet/cecil by
@​dotnet-maestro[bot] in dotnet/runtime#120418
* [release/9.0-staging] Update dependencies from dotnet/xharness by
@​dotnet-maestro[bot] in dotnet/runtime#120425
* [release/9.0-staging] Update dependencies from dotnet/hotreload-utils
by @​dotnet-maestro[bot] in
dotnet/runtime#120404
* [release/9.0-staging] Prevent format injection in hosting Windows PAL
printf functions when redirected to file by @​jkoritzinsky in
dotnet/runtime#119786
* [release/9.0-staging] Update dependencies from dotnet/runtime-assets
by @​dotnet-maestro[bot] in
dotnet/runtime#120417
* Update branding to 9.0.11 by @​vseanreesermsft in
dotnet/runtime#120474
* [release/9.0-staging] Update dependencies from dotnet/icu by
@​dotnet-maestro[bot] in dotnet/runtime#120586
* [release/9.0] Update dependencies from dotnet/emsdk by
@​dotnet-maestro[bot] in dotnet/runtime#120409
* [release/9.0] Update dependencies from dotnet/arcade by
@​dotnet-maestro[bot] in dotnet/runtime#120396
* [release/9.0-staging] [mono][interp] Fix various leaks, primarily
around dynamic methods by @​BrzVlad in
dotnet/runtime#120600
* [release/9.0-staging] [mono][sgen] Fix incorrect condition when
checking if we should do a major collection by @​github-actions[bot] in
dotnet/runtime#120533
* [automated] Merge branch 'release/9.0' => 'release/9.0-staging' by
@​github-actions[bot] in dotnet/runtime#120570
* [manual] Merge release/9.0-staging into release/9.0 by
@​PranavSenthilnathan in dotnet/runtime#120615
* Merging internal commits for release/9.0 by @​vseanreesermsft in
dotnet/runtime#120719
* [release/9.0] Update dependencies from dotnet/arcade by
@​dotnet-maestro[bot] in dotnet/runtime#120765
* [release/9.0] Update dependencies from dotnet/emsdk by
@​dotnet-maestro[bot] in dotnet/runtime#120779
* [release/9.0] Update dependencies from dotnet/emsdk by
@​dotnet-maestro[bot] in dotnet/runtime#120814
* [release/9.0] Update Microsoft.Build.* versions to 17.8.43 by
@​PranavSenthilnathan in dotnet/runtime#120820


**Full Changelog**:
dotnet/runtime@v9.0.10...v9.0.11

## 9.0.10

[Release](https://github.com/dotnet/runtime/releases/tag/v9.0.9)

## What's Changed
* [release/9.0-staging] Disable release assert on disallowed thread
re-initialization for managed C++ by @​github-actions[bot] in
dotnet/runtime#118842
* [release/9.0-staging] [wasm][AOT] fix codegen for small structs on
stack by @​github-actions[bot] in
dotnet/runtime#118416
* Update branding to 9.0.10 by @​vseanreesermsft in
dotnet/runtime#119280
* [release/9.0-staging] Don't use vfork on android by
@​github-actions[bot] in dotnet/runtime#118331
* [release/9.0-staging] [mono][debugger] Fix assertion when stepping by
@​github-actions[bot] in dotnet/runtime#118459
* [release/9.0-staging][maccatalyst] Check for -Wno-overriding-option
for compatibility with clang in Xcode 16.3+ by @​akoeplinger in
dotnet/runtime#119301
* [release/9.0-staging][HTTP] Stress fix for docker compose by
@​ManickaP in dotnet/runtime#119455
* Merging internal commits for release/9.0 by @​vseanreesermsft in
dotnet/runtime#119505
* [9.0] Preserve Lock ID Members by @​jkoritzinsky in
dotnet/runtime#119281
* [release/9.0] Update dependencies from dotnet/emsdk by
@​dotnet-maestro[bot] in dotnet/runtime#118940
* [release/9.0-staging] Update dependencies from dotnet/hotreload-utils
by @​dotnet-maestro[bot] in
dotnet/runtime#118151
* [release/9.0-staging] Update dependencies from dotnet/cecil by
@​dotnet-maestro[bot] in dotnet/runtime#118372
* [release/9.0-staging] Update dependencies from dotnet/icu by
@​dotnet-maestro[bot] in dotnet/runtime#118423
* [release/9.0-staging] Update dependencies from dotnet/roslyn by
@​dotnet-maestro[bot] in dotnet/runtime#118193
* [release/9.0-staging] Update dependencies from dotnet/runtime-assets
by @​dotnet-maestro[bot] in
dotnet/runtime#118758
* [release/9.0-staging] Update dependencies from dotnet/icu by
@​dotnet-maestro[bot] in dotnet/runtime#119619
* [release/9.0-staging] Update dependencies from
dotnet/source-build-reference-packages by @​dotnet-maestro[bot] in
dotnet/runtime#119598
* [release/9.0-staging] Update dependencies from dotnet/cecil by
@​dotnet-maestro[bot] in dotnet/runtime#119620
* [release/9.0-staging] Update dependencies from dotnet/xharness by
@​dotnet-maestro[bot] in dotnet/runtime#119051
* [automated] Merge branch 'release/9.0' => 'release/9.0-staging' by
@​github-actions[bot] in dotnet/runtime#118492
* [release/9.0-staging] [H/3] Fix interop tests. by
@​github-actions[bot] in dotnet/runtime#119522
* [release/9.0-staging] Disable tests parallelization in flaky OleDB
tests by @​github-actions[bot] in
dotnet/runtime#119626
* [release/9.0-staging] Update dependencies from dotnet/icu by
@​dotnet-maestro[bot] in dotnet/runtime#119690
* [release/9.0-staging] Update dependencies from dotnet/arcade by
@​dotnet-maestro[bot] in dotnet/runtime#118224
* [release/9.0-staging] Update dependencies from dotnet/runtime-assets
by @​dotnet-maestro[bot] in
dotnet/runtime#119677
* [release/9.0-staging] Update dependencies from dotnet/hotreload-utils
by @​dotnet-maestro[bot] in
dotnet/runtime#119635
* [release/9.0] Update dependencies from dotnet/emsdk by
@​dotnet-maestro[bot] in dotnet/runtime#119669
* [release/9.0-staging] Fix recursion issue found in PROCCreateCrashDump
by @​github-actions[bot] in
dotnet/runtime#119128
* [release/9.0-staging] Update dependencies from dotnet/cecil by
@​dotnet-maestro[bot] in dotnet/runtime#119742
* [automated] Merge branch 'release/9.0' => 'release/9.0-staging' by
@​github-actions[bot] in dotnet/runtime#119721
* [release/9.0] Update dependencies from dotnet/emsdk by
@​dotnet-maestro[bot] in dotnet/runtime#119753
* [release/9.0-staging] Update dependencies from dotnet/icu by
@​dotnet-maestro[bot] in dotnet/runtime#119793
* [release/9.0] Update dependencies from dotnet/emsdk by
@​dotnet-maestro[bot] in dotnet/runtime#119809
* [release/9.0-staging] Update dependencies from dotnet/icu by
@​dotnet-maestro[bot] in dotnet/runtime#119832
* [release/9.0-staging] Update dependencies from dotnet/roslyn by
@​dotnet-maestro[bot] in dotnet/runtime#119830
* Backport macOS 26 Tahoe test fixes to release/9.0-staging by
@​vcsjones in dotnet/runtime#119716
* [release/9.0-staging] Update dependencies from dotnet/arcade by
@​dotnet-maestro[bot] in dotnet/runtime#119871
* [release/9.0-staging] Update dependencies from dotnet/icu by
@​dotnet-maestro[bot] in dotnet/runtime#119872
* [release/9.0-staging] Disable Multicast SocketOption test by
@​github-actions[bot] in dotnet/runtime#119889
* [release/9.0-staging] Update dependencies from dotnet/icu by
@​dotnet-maestro[bot] in dotnet/runtime#119932
* [release/9.0] Update dependencies from dotnet/emsdk by
@​dotnet-maestro[bot] in dotnet/runtime#119900
* [manual] Merge release/9.0-staging into release/9.0 by @​tarekgh in
dotnet/runtime#119966
* [release/9.0] Update dependencies from dotnet/arcade by
@​dotnet-maestro[bot] in dotnet/runtime#120025
* [release/9.0] Update dependencies from dotnet/arcade by
@​dotnet-maestro[bot] in dotnet/runtime#120111


**Full Changelog**:
dotnet/runtime@v9.0.9...v9.0.10

Commits viewable in [compare
view](dotnet/runtime@v9.0.9...v9.0.11).
</details>

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after
your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge
and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating
it. You can achieve the same result by closing it manually
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore <dependency name> major version` will close this
group update PR and stop Dependabot creating any more for the specific
dependency's major version (unless you unignore this specific
dependency's major version or upgrade to it yourself)
- `@dependabot ignore <dependency name> minor version` will close this
group update PR and stop Dependabot creating any more for the specific
dependency's minor version (unless you unignore this specific
dependency's minor version or upgrade to it yourself)
- `@dependabot ignore <dependency name>` will close this group update PR
and stop Dependabot creating any more for the specific dependency
(unless you unignore this specific dependency or upgrade to it yourself)
- `@dependabot unignore <dependency name>` will remove all of the ignore
conditions of the specified dependency
- `@dependabot unignore <dependency name> <ignore condition>` will
remove the ignore condition of the specified dependency and ignore
conditions


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
This was referenced Jan 1, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Servicing-approved Shiproom has approved the issue

Projects

No open projects
Status: Done

Development

Successfully merging this pull request may close these issues.

3 participants