public async void LoadProjectInfo() { CurrentProjectInfo = new ProjectInfoViewModel(); var snapshot = CurrentProject?.Snapshot.Project; if (snapshot == null) { return; } var projectEngine = snapshot.GetProjectEngine(); var feature = projectEngine.EngineFeatures.OfType <IRazorDirectiveFeature>().FirstOrDefault(); var directives = feature?.Directives ?? Array.Empty <DirectiveDescriptor>(); CurrentProjectInfo.Directives = new ObservableCollection <DirectiveDescriptorViewModel>(directives.Select(d => new DirectiveDescriptorViewModel(d))); var documents = snapshot.DocumentFilePaths.Select(d => snapshot.GetDocument(d)); CurrentProjectInfo.Documents = new ObservableCollection <DocumentSnapshotViewModel>(documents.Select(d => new DocumentSnapshotViewModel(d))); if (snapshot.TryGetTagHelpers(out var tagHelpers)) { CurrentProjectInfo.TagHelpers = new ObservableCollection <TagHelperViewModel>(tagHelpers.Select(t => new TagHelperViewModel(t))); } else { CurrentProjectInfo.TagHelpers = new ObservableCollection <TagHelperViewModel>(); CurrentProjectInfo.TagHelpersLoading = true; try { tagHelpers = await snapshot.GetTagHelpersAsync(); CurrentProjectInfo.TagHelpers = new ObservableCollection <TagHelperViewModel>(tagHelpers.Select(t => new TagHelperViewModel(t))); } finally { CurrentProjectInfo.TagHelpersLoading = false; } } }
private async void LoadProjectInfoAsync(ProjectViewModel projectViewModel) { try { CurrentProjectInfo = null; IsLoading = true; var solution = _workspace.CurrentSolution; var project = solution.GetProject(projectViewModel.Id); var documents = GetCshtmlDocuments(project); var configuration = await _configurationFactory.GetConfigurationAsync(project); var directives = await _directiveResolver.GetRazorEngineDirectivesAsync(_workspace, project); var assemblyFilters = project.MetadataReferences .Select(reference => reference.Display) .Select(filter => Path.GetFileNameWithoutExtension(filter)); var projectFilters = project.AllProjectReferences.Select(filter => solution.GetProject(filter.ProjectId).AssemblyName); var resolutionResult = await _tagHelperResolver.GetTagHelpersAsync(project); var files = GetCshtmlDocuments(project); CurrentProjectInfo = new ProjectInfoViewModel() { Assemblies = new ObservableCollection <AssemblyViewModel>(configuration.Assemblies.Select(a => new AssemblyViewModel(a))), Directives = new ObservableCollection <DirectiveViewModel>(directives.Select(d => new DirectiveViewModel(d))), Documents = new ObservableCollection <DocumentViewModel>(documents.Select(d => new DocumentViewModel(d))), TagHelpers = new ObservableCollection <TagHelperViewModel>(resolutionResult.Descriptors.Select(t => new TagHelperViewModel(t))), }; } catch (Exception ex) { _errorHandler.Invoke(ex); } IsLoading = false; }