public void SetSolution(IVsSolution solution) { if (_listener != null) { throw new InvalidOperationException("Cannot set solution multiple times"); } if (solution != null) { _listener = new SolutionEventsListener(solution); _listener.ProjectLoaded += Solution_ProjectLoaded; _listener.ProjectClosing += Solution_ProjectUnloading; _listener.ProjectUnloading += Solution_ProjectUnloading; _listener.StartListeningForChanges(); lock (_providers) { foreach (var project in solution.EnumerateLoadedProjects() .Select(p => p.GetPythonProject()) .Where(p => p != null)) { _providers[project.Interpreters] = project; } } } }
internal static IEnumerable <HierarchyItem> EnumerateHierarchyItems(this IVsSolution solution) { var loadedProjects = solution.EnumerateLoadedProjects(onlyNodeProjects: false); foreach (var project in loadedProjects) { var hierarchy = (IVsHierarchy)project; foreach (var projectItem in project.EnumerateProjectItems((uint)(__VSEHI.VSEHI_Leaf | __VSEHI.VSEHI_Nest | __VSEHI.VSEHI_OmitHier | __VSEHI.VSEHI_Branch))) { ErrorHandler.ThrowOnFailure(hierarchy.GetProperty(projectItem, (int)__VSHPROPID.VSHPROPID_Name, out var name)); ErrorHandler.ThrowOnFailure(hierarchy.GetProperty(projectItem, (int)__VSHPROPID.VSHPROPID_Parent, out var parentId)); yield return(new HierarchyItem() { ItemId = projectItem, Name = (string)name, ParentId = (int)parentId }); } } }
public static IEnumerable <IVsProject> GetLoadedProjects(this IVsSolution solution) { return(solution.EnumerateLoadedProjects(__VSENUMPROJFLAGS.EPF_LOADEDINSOLUTION).OfType <IVsProject>()); }
public Solution(IVsSolution solution) { Projects = solution.EnumerateLoadedProjects(__VSENUMPROJFLAGS.EPF_LOADEDINSOLUTION).OfType <IVsProject>().Select(m => new Project(m)); }