-
Notifications
You must be signed in to change notification settings - Fork 1.2k
[dotnet-watch] Auto-restart project on runtime rude edit #51073
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Open
tmat
wants to merge
5
commits into
dotnet:release/10.0.1xx
Choose a base branch
from
tmat:RuntimeRudeEdits
base: release/10.0.1xx
Could not load branches
Branch not found: {{ refName }}
Loading
Could not load tags
Nothing to show
Loading
Are you sure you want to change the base?
Some commits from the old base branch may be removed from the timeline,
and old review comments may become outdated.
Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
@DustinCampbell ptal |
This was referenced Oct 1, 2025
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This is a pretty cool way to solve this problem. Just had a few questions.
DustinCampbell
approved these changes
Oct 3, 2025
Requires #51032 |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Description
Implements support for auto-restart when runtime rude edit is encountered.
Fixes #48515
Background
Certain Hot Reload edits are applied speculatively - the compiler emits two code paths gated by a runtime check. If the expected code path is executed the edit works as the user intended (the executed code matches the source code) and the application continues executing flawlessly. The other code path throws
HotReloadException
with message that explains why the edit failed.Examples of such edits include renaming a method, changing method signature, changing lambda signature, changing lambda closure, etc. In these cases a new method or lambda is emitted that matches the code, but the application may still hold onto a delegate to the previous version of the method. If such no longer valid delegate is invoked the
HotReloadException
is thrown.Change
In this change, the Hot Reload agent loaded into the application process hooks into the
HotReloadException
constructor via a hook added by dotnet/roslyn#79790 when theHotReloadException
is emitted into the delta. The exception construction is intercepted, a notification is sent to the host (dotnet-watch/VS/VS Code) and the current thread is suspended (to avoid throwing the exception). When the host receives the notification it triggers auto-restarts of the process.The change refactors the pipe communication to allow for sending the rude edit notification at arbitrary time. Previously the pipe expected serialized sequence of request - response messages. Instead, we now asynchronously read incoming messages in a loop and trigger the corresponding action based on the response type received.
Before
After
Customer Impact
Impacts Hot Reload scenarios for all types of projects but especially Aspire and web app scenarios.
Regression?
Risk
Justification: The impact is limited to dotnet-watch.
Verification
Packaging changes reviewed?