Skip to content

feat: report per-project progress while loading a solution - #417

Merged
razzmatazz merged 2 commits into
razzmatazz:mainfrom
pbednarcik:feat/solution-load-progress
Aug 26, 2026
Merged

feat: report per-project progress while loading a solution#417
razzmatazz merged 2 commits into
razzmatazz:mainfrom
pbednarcik:feat/solution-load-progress

Conversation

@pbednarcik

Copy link
Copy Markdown
Contributor

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.

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
pbednarcik force-pushed the feat/solution-load-progress branch from 4fc026d to ad0b0fe Compare August 25, 2026 22:25
@razzmatazz
razzmatazz merged commit 664d143 into razzmatazz:main Aug 26, 2026
3 checks passed
@razzmatazz

Copy link
Copy Markdown
Owner

thank you!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants