From 793b5cd4249895b69980206660369755e57d5059 Mon Sep 17 00:00:00 2001 From: Fabrice Foray Date: Sat, 22 Aug 2026 15:59:50 +0200 Subject: [PATCH] [VsIntegration] Fix reference resolution: marshal AddPendingReferences onto the UI thread --- .../ProjectPackage/NodesSDK/SdkProjectNode.cs | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/src/VisualStudio/ProjectPackage/NodesSDK/SdkProjectNode.cs b/src/VisualStudio/ProjectPackage/NodesSDK/SdkProjectNode.cs index fc927986ed..de2bf2ea6d 100644 --- a/src/VisualStudio/ProjectPackage/NodesSDK/SdkProjectNode.cs +++ b/src/VisualStudio/ProjectPackage/NodesSDK/SdkProjectNode.cs @@ -743,6 +743,19 @@ public override void BeforeSave() } private void AddPendingReferences(List newReferences, SdkSubProjectInfo active) + { + // Callers include XSharpIDEBuildLogger.ProjectFinishedHandler, which runs on + // an MSBuild logger (background) thread, but this method disposes + // XSharpDependencyNode (an AssemblyReferenceNode), whose Dispose() requires + // the UI thread. Marshal onto the UI thread before touching any hierarchy node. + ThreadHelper.JoinableTaskFactory.Run(async delegate + { + await ThreadHelper.JoinableTaskFactory.SwitchToMainThreadAsync(); + AddPendingReferencesOnUIThread(newReferences, active); + }); + } + + private void AddPendingReferencesOnUIThread(List newReferences, SdkSubProjectInfo active) { HierarchyNode frameworkNode = null; if (SubProjects.Count > 1)