예제 #1
0
        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;
                }
            }
        }
예제 #2
0
        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;
        }