microsoft / microsoft/vscode-dotnettools

Design-time build failure discards the entire project-model cache (warm open == cold open)

Open
#3,337 0 comments 0 reactions 1 assignee View on GitHub

@emaf is already working on this.

Since Jul 23, 2026.

v11
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

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.