public async Task <IVsProjectAdapter> CreateAdapterForDeferredProjectAsync(IVsHierarchy project) { Assumes.Present(project); await _threadingService.JoinableTaskFactory.SwitchToMainThreadAsync(); var vsHierarchyItem = VsHierarchyItem.FromVsHierarchy(project); var fullProjectPath = VsHierarchyUtility.GetProjectPath(project); var uniqueName = string.Empty; _vsSolution.Value.GetUniqueNameOfProject(project, out uniqueName); var projectNames = new ProjectNames( fullName: fullProjectPath, uniqueName: uniqueName, shortName: Path.GetFileNameWithoutExtension(fullProjectPath), customUniqueName: GetCustomUniqueName(uniqueName)); var workspaceBuildProperties = new WorkspaceProjectBuildProperties( fullProjectPath, _workspaceService.Value, _threadingService); var projectTypeGuid = await _workspaceService.Value.GetProjectTypeGuidAsync(fullProjectPath); return(new VsProjectAdapter( vsHierarchyItem, projectNames, fullProjectPath, projectTypeGuid, EnsureProjectIsLoaded, workspaceBuildProperties, _threadingService, _workspaceService.Value)); }
public async Task <IVsProjectAdapter> CreateAdapterForFullyLoadedProjectAsync(IVsHierarchy hierarchy) { Assumes.Present(hierarchy); // Get services while we might be on background thread var vsSolution = await _vsSolution.GetValueAsync(); // switch to main thread and use services we know must be done on main thread. await _threadingService.JoinableTaskFactory.SwitchToMainThreadAsync(); var vsHierarchyItem = VsHierarchyItem.FromVsHierarchy(hierarchy); Func <IVsHierarchy, EnvDTE.Project> loadDteProject = hierarchy => VsHierarchyUtility.GetProjectFromHierarchy(hierarchy); var buildStorageProperty = vsHierarchyItem.VsHierarchy as IVsBuildPropertyStorage; var vsBuildProperties = new VsProjectBuildProperties( new Lazy <EnvDTE.Project>(() => loadDteProject(hierarchy)), buildStorageProperty, _threadingService); var fullProjectPath = VsHierarchyUtility.GetProjectPath(hierarchy); var projectNames = await ProjectNames.FromIVsSolution2(fullProjectPath, (IVsSolution2)vsSolution, hierarchy, CancellationToken.None); return(new VsProjectAdapter( vsHierarchyItem, projectNames, fullProjectPath, loadDteProject, vsBuildProperties, _threadingService)); }