Skip to content

Conversation

@jasonmalinowski
Copy link
Member

Right now we have an issue where users are getting broken MEF compositions cached on their machines, so subsequent launches of the product are operating on a broken composition. It's not "broken" in the sense that "the cache cannot be loaded" but rather the content of the cache is just missing most of our MEF parts. As a defense-in-depth change to deal with potential transient issues, let's not cache compositions we know are bad.

Right now we have an issue where users are getting broken MEF
compositions cached on their machines, so subsequent launches of the
product are operating on a broken composition. It's not "broken"
in the sense that "the cache cannot be loaded" but rather the content
of the cache is just missing most of our MEF parts. As a defense-in-
depth change to deal with potential transient issues, let's not cache
compositions we know are bad.
@jasonmalinowski jasonmalinowski self-assigned this Aug 22, 2025
@jasonmalinowski jasonmalinowski requested a review from a team as a code owner August 22, 2025 21:13
@CyrusNajmabadi
Copy link
Member

Slightly concerned that someone could always be in a bad state (say for some other component we don't care about). So we recreate every time.

Maybe log telemetry?

foreach (var exception in catalog.DiscoveredParts.DiscoveryErrors)
{
hasErrors = true;
LogError($"Encountered exception in the MEF composition: {exception.Message}");
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Will this come back to us as telemetry?

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

And yes, at least indirectly: this goes through the gold bar reporting, which then logs telemetry for this message. I can see telemetry for myself or @phil-allen-msft hitting this exact line.

@jasonmalinowski
Copy link
Member Author

@CyrusNajmabadi I think we've already got telemetry logging those errors; digging into that further.

@jasonmalinowski
Copy link
Member Author

@CyrusNajmabadi And if there is a failure, we will log a gold bar for that failure. So it won't be quiet. Right now we're seeing cases where we fail, but you won't see the root cause since we cached the compositon which leads to downstream failure. This way if something is stuck, we'll at least recreate and see the same original failure.

@CyrusNajmabadi
Copy link
Member

Wfm!

@jasonmalinowski jasonmalinowski merged commit 18b7901 into dotnet:main Aug 22, 2025
26 checks passed
@dotnet-policy-service dotnet-policy-service bot added this to the Next milestone Aug 22, 2025
@jasonmalinowski
Copy link
Member Author

/backport to release/dev18.0

@jasonmalinowski jasonmalinowski deleted the dont-cache-broken-compositions branch August 23, 2025 01:05
@github-actions
Copy link
Contributor

Started backporting to release/dev18.0: https://github.com/dotnet/roslyn/actions/runs/17169243126

JoeRobich added a commit to dotnet/roslyn-tools that referenced this pull request Aug 29, 2025
46 PRs before and 36 after
```diff
+    * [Cache diagnostic analyzer computation](dotnet/roslyn#80045)
+    * [Remove parameter always passed the same value](dotnet/roslyn#80042)
     * [Update doc for IMethodSymbol.IsExtensionMethod](dotnet/roslyn#80016)
     * [Don't cache known-broken compositions](dotnet/roslyn#80021)
     * [Cleanup methods in DiagAnalyzerService](dotnet/roslyn#80013)
     * [Simplify processing of errors reported by the build](dotnet/roslyn#79964)
     * [Additional cleanup of the DiagnosticAnalyzerServier](dotnet/roslyn#80005)
     * [Fix Code Lens around source generated files](dotnet/roslyn#79992)
     * [Remove superflous DiagService api that can be achieved with existing apis](dotnet/roslyn#80007)
     * [Generate `init` accessor for required properties inside `readonly struct`s](dotnet/roslyn#80004)
     * [Remove existing low level diag oop code now that it's all handled at higher levels.](dotnet/roslyn#79994)
     * [Allow large InlineHint ArrayBuilder pooling](dotnet/roslyn#79857)
     * [Reduce allocations obtaining classified spans in ClassifierHelper](dotnet/roslyn#79856)
     * [Compute span diagnostics in oop](dotnet/roslyn#79991)
     * [Allow Razor cohosting to work with non-Razor SDK projects](dotnet/roslyn#79953)
     * [Move computation of deprioritized analyzers to oop](dotnet/roslyn#79989)
     * [EnC: Fix symbol mapping of delegates with indexed name](dotnet/roslyn#79837)
     * [Emit telemetry 'durations' with known radix point '.'](dotnet/roslyn#79988)
     * [Move logic up into DiagService](dotnet/roslyn#79985)
     * [Move the StateManager type up to the DiagnosticService from the DiagnosticIncrementalANalyzer](dotnet/roslyn#79984)
     * [Immediately remote diagnostics call to OOP](dotnet/roslyn#79983)
     * [Build Microsoft.CodeAnalysis.SemanticSearch.Extension ref assembly for use in semantic search queries](dotnet/roslyn#79972)
     * [Only cache compilation if we have the same set of analyzers](dotnet/roslyn#79978)
     * [Delete unused property](dotnet/roslyn#79963)
     * [Update 'use expr body' to be a purely syntactic analyzer](dotnet/roslyn#79979)
     * [Mark 'Use expr body' as a syntax-only fixer](dotnet/roslyn#79971)
     * [♻️ MSBuildWorkspaceDirectory - Fallback to AppContext.BaseDirectory when Assembly Location is empty](dotnet/roslyn#79934)
     * [Merge runtime async support into main](dotnet/roslyn#79833)
     * [Implement "Simplify property accessor" feature](dotnet/roslyn#79754)
-    * Merge main to runtime async branch (PR: [#79961](dotnet/roslyn#79961))
     * [Redo how and when we report source generator telemetry](dotnet/roslyn#79951)
     * [Allow MEF components to supply assembly path resolvers](dotnet/roslyn#79218)
     * [Allow Razor to hook up the source generator in misc files](dotnet/roslyn#79891)
     * [Block ENC for extension blocks](dotnet/roslyn#79883)
     * [Upgrade servicehub.client to fix test source discovery](dotnet/roslyn#79899)
     * [Update package restore error message.](dotnet/roslyn#79876)
-    * Merge main (PR: [#79834](dotnet/roslyn#79834))
-    * Merge main (PR: [#79830](dotnet/roslyn#79830))
     * [Baseline struct lifting tests](dotnet/roslyn#79505)
-    * Merge main to runtime async branch (PR: [#79582](dotnet/roslyn#79582))
-    * Merge main (PR: [#79424](dotnet/roslyn#79424))
-    * Merge main (PR: [#78994](dotnet/roslyn#78994))
-    * Merge main to runtime async branch (PR: [#78740](dotnet/roslyn#78740))
-    * Merge main to runtime async branch (PR: [#78517](dotnet/roslyn#78517))
-    * Merge main to runtime async branch (PR: [#78114](dotnet/roslyn#78114))
-    * Merge main to runtime async branch (PR: [#77700](dotnet/roslyn#77700))
-    * Merge main to runtime async branch (PR: [#77533](dotnet/roslyn#77533))
-    * Merge main to runtime async branch (PR: [#77265](dotnet/roslyn#77265))
```
@akhera99 akhera99 modified the milestones: Next, 18.0 P1 Sep 22, 2025
@akhera99 akhera99 added this to the 18.0 P2 milestone Sep 23, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

6 participants