feat: report per-project progress while loading a solution - #417
Merged
razzmatazz merged 2 commits intoAug 26, 2026
Conversation
The solution load path called OpenSolutionAsync without its progress overload, so clients saw only the workDoneProgress begin and end events around a load that can take many seconds on a large solution. Requests issued during the load block for exactly the remaining load time, so projects done over total maps near linearly to seconds remaining, and a percentage lets clients display load progress and estimate readiness. MSBuildWorkspace reports one Evaluate/Build/Resolve operation sequence per project and target framework; a project is counted once, on its first Resolve. Reports are forwarded through a mailbox so they reach the client in the order they were produced without blocking the loader's callback. The project-file load path already reported per-project progress; the two paths now emit the same message shape.
pbednarcik
force-pushed
the
feat/solution-load-progress
branch
from
August 25, 2026 22:25
4fc026d to
ad0b0fe
Compare
Owner
|
thank you! |
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
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.
Loading a big solution can take many seconds, and today the only
workDoneProgress signals around it are the begin and end events. Requests
issued during the load block for exactly the remaining load time, so a per
project percentage lets a client display progress and estimate how long
until the server answers.
This PR wires the IProgress overload of OpenSolutionAsync into the existing
progress arc: one report per project, counted on its first Resolve
operation (a project goes through its Evaluate/Build/Resolve sequence once
per target framework), forwarded through a mailbox so reports reach the
client in the order they were produced without blocking the loader
callback. LoadMetadataForReferencedProjects can pull in projects that are
not solution members, so the denominator widens as they appear and the
percentage stays monotonic and at most 100. The project-file load path
already reported per project progress; both paths now emit the same
message shape.
Two integration tests pin the behavior over a running server: a two
project solution reports two per project completions with rising
percentages, and a solution referencing a project outside its member list
(new fixture) keeps the percentage monotonic and at most 100. CHANGELOG.md
entry included.