microsoft / microsoft/vscode-dotnettools
Design-time build failure discards the entire project-model cache (warm open == cold open)
@emaf is already working on this.
Since Jul 23, 2026.
- Dominant language
- No language data
- Stars
- 321
- Forks
- 54
- Avg merge
- 2d 19h
- Merged PRs (30d)
- 2
Description
Summary
When a solution is opened and its design-time build (project-model build) reports a failure, none of the projects get persisted to the project-model cache — not even the ones that built successfully. On the next open, the cache is empty (0 loaded, N missing) and the full design-time build runs again. Warm-cache opens therefore behave identically to cold opens for any solution that contains even a single project that fails its design-time build.
Impact
- Solutions with one problematic project never benefit from the warm project-model cache.
- Every open pays the full design-time-build cost (tens of seconds on large solutions), permanently.
- The failure is silent — users just see consistently slow opens with no indication why.
Observed behavior
On a large solution (~277 projects) where one or more projects fail the design-time build:
- Every open logs
cache: 0 loaded, 277 missing. - Warm-cache time-to-IntelliSense ≈ cold time-to-IntelliSense (~20 s), whereas comparable solutions with a fully-succeeding design-time build load from cache in well under a second.
Expected behavior
Cache persistence should be per-project and fault-tolerant: projects that build successfully should be written to the cache and reused on the next open, even if some other project in the solution fails its design-time build. A single failing project should not invalidate the entire warm cache.
Notes
- Root cause appears to be all-or-nothing cache-write semantics on design-time-build failure, independent of which project failed.
- Reproduced on macOS (Apple Silicon), but the cache-write logic is platform-independent.
Contributor guide
No contributing guide indexed for this repository
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Assessment
This issue has not been assessed yet.