Esempio n. 1
0
 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}");
            }
        }