private void SolutionEvents_OnBeforeUnloadProject(object sender, Microsoft.VisualStudio.Shell.Events.LoadProjectEventArgs e) { ThreadHelper.ThrowIfNotOnUIThread(); e.RealHierarchy.GetProperty(VSConstants.VSITEMID_ROOT, (int)__VSHPROPID.VSHPROPID_ExtObject, out object projectObj); EnvDTE.Project project = (EnvDTE.Project)projectObj; Projects.TryRemove(project.FullName, out _); }
private async void SolutionEvents_OnBeforeUnloadProject(object sender, Microsoft.VisualStudio.Shell.Events.LoadProjectEventArgs e) { await ThreadHelper.JoinableTaskFactory.SwitchToMainThreadAsync(); e.RealHierarchy.GetProperty(VSConstants.VSITEMID_ROOT, (int)__VSHPROPID.VSHPROPID_ExtObject, out object projectObj); EnvDTE.Project project = (EnvDTE.Project)projectObj; Projects.TryRemove(project.FullName, out _); }
#pragma warning disable VSTHRD100 // Avoid async void methods private async void SolutionEvents_OnBeforeUnloadProject(object sender, Microsoft.VisualStudio.Shell.Events.LoadProjectEventArgs e) #pragma warning restore VSTHRD100 // Avoid async void methods { try { await ThreadHelper.JoinableTaskFactory.SwitchToMainThreadAsync(); e.RealHierarchy.GetProperty(VSConstants.VSITEMID_ROOT, (int)__VSHPROPID.VSHPROPID_ExtObject, out object projectObj); EnvDTE.Project project = (EnvDTE.Project)projectObj; Projects.TryRemove(project.FullName, out _); } catch (Exception ex) { _ = Helpers.ShowErrorAsync("Before Unload Project", $"Error in BeforeUnloadProject event: {ex.Message}\n{ex}"); } }
#pragma warning disable VSTHRD100 // Avoid async void methods private async void SolutionEvents_OnAfterLoadProject(object sender, Microsoft.VisualStudio.Shell.Events.LoadProjectEventArgs e) #pragma warning restore VSTHRD100 // Avoid async void methods { try { await ThreadHelper.JoinableTaskFactory.SwitchToMainThreadAsync(); ProjectModel projModel = null; e.RealHierarchy.GetProperty(VSConstants.VSITEMID_ROOT, (int)__VSHPROPID.VSHPROPID_ExtObject, out object projectObj); if (projectObj is EnvDTE.Project project) { var interfaces = project.GetType().GetInterfaces(); var newProject = EnvUtils.GetProject(project.FullName); if (newProject != null) { projModel = CreateProjectModel(newProject); if (Projects.TryAdd(newProject.FullPath, projModel)) { OnProjectLoaded(newProject, projModel); } } } else { var newProjects = ProjectCollection.GlobalProjectCollection.LoadedProjects.Where(p => !Projects.ContainsKey(p.FullPath) && !p.FullPath.EndsWith(".user")).ToList(); foreach (var item in newProjects) { var projectModel = CreateProjectModel(item); if (Projects.TryAdd(item.FullPath, projectModel)) { OnProjectLoaded(item, projectModel); } } } } catch (Exception ex) { _ = Helpers.ShowErrorAsync("After Load Project", $"Error in AfterLoadProject event: {ex.Message}\n{ex}"); } }