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)