Beispiel #1
0
        public static ProjectSnapshot Create(string projectDirectory, string configuration, DesignTimeWorkspace workspaceContext, IReadOnlyList <string> projectSearchPaths)
        {
            var projectContextsCollection = workspaceContext.GetProjectContextCollection(projectDirectory);

            if (!projectContextsCollection.ProjectContexts.Any())
            {
                throw new InvalidOperationException($"Unable to find project.json in '{projectDirectory}'");
            }
            GlobalSettings globalSettings;
            var            currentSearchPaths = projectContextsCollection.Project.ResolveSearchPaths(out globalSettings);

            var snapshot = new ProjectSnapshot();

            snapshot.Project            = projectContextsCollection.Project;
            snapshot.ProjectDiagnostics = new List <DiagnosticMessage>(projectContextsCollection.ProjectDiagnostics);
            snapshot.ProjectSearchPaths = currentSearchPaths.ToList();
            snapshot.GlobalJsonPath     = globalSettings?.FilePath;

            foreach (var projectContext in projectContextsCollection.FrameworkOnlyContexts)
            {
                snapshot.ProjectContexts[projectContext.TargetFramework] =
                    ProjectContextSnapshot.Create(projectContext, configuration, currentSearchPaths);
            }

            return(snapshot);
        }
Beispiel #2
0
        private bool UpdateProject()
        {
            ProjectSnapshot newSnapshot = null;

            if (_appPath.WasAssigned || _configure.WasAssigned || _filesChanged.WasAssigned || _refreshDependencies.WasAssigned)
            {
                _appPath.ClearAssigned();
                _configure.ClearAssigned();
                _filesChanged.ClearAssigned();

                bool resetCache = _refreshDependencies.WasAssigned ? _refreshDependencies.Value : false;
                _refreshDependencies.ClearAssigned();

                newSnapshot = ProjectSnapshot.Create(_appPath.Value,
                                                     _configure.Value,
                                                     _workspaceContext,
                                                     _remote.ProjectSearchPaths,
                                                     clearWorkspaceContextCache: resetCache);
            }

            if (newSnapshot == null)
            {
                return(false);
            }

            _local = newSnapshot;

            return(true);
        }
Beispiel #3
0
        public static ProjectSnapshot Create(string projectDirectory,
                                             string configuration,
                                             DesignTimeWorkspace workspaceContext,
                                             IReadOnlyList<string> previousSearchPaths,
                                             bool clearWorkspaceContextCache)
        {
            var projectContextsCollection = workspaceContext.GetProjectContextCollection(projectDirectory, clearWorkspaceContextCache);
            if (!projectContextsCollection.ProjectContexts.Any())
            {
                throw new InvalidOperationException($"Unable to find project.json in '{projectDirectory}'");
            }
            GlobalSettings globalSettings;
            var currentSearchPaths = projectContextsCollection.Project.ResolveSearchPaths(out globalSettings);

            var snapshot = new ProjectSnapshot();
            snapshot.Project = projectContextsCollection.Project;
            snapshot.ProjectDiagnostics = new List<DiagnosticMessage>(projectContextsCollection.ProjectDiagnostics);
            snapshot.ProjectSearchPaths = currentSearchPaths.ToList();
            snapshot.GlobalJsonPath = globalSettings?.FilePath;

            foreach (var projectContext in projectContextsCollection.FrameworkOnlyContexts)
            {
                snapshot.ProjectContexts[projectContext.TargetFramework] =
                    ProjectContextSnapshot.Create(projectContext, configuration, previousSearchPaths);
            }

            return snapshot;
        }
        private void SendOutgingMessages(List <DiagnosticMessageGroup> diagnostics)
        {
            _projectInforamtionMessenger.UpdateRemote(_local, _remote);
            _projectDiagnosticsMessenger.UpdateRemote(_local, _remote);

            if (_local.ProjectDiagnostics != null)
            {
                diagnostics.Add(new DiagnosticMessageGroup(_local.ProjectDiagnostics));
            }

            var unprocessedFrameworks = new HashSet <NuGetFramework>(_remote.Projects.Keys);

            foreach (var pair in _local.Projects)
            {
                ProjectSnapshot localProjectSnapshot = pair.Value;
                ProjectSnapshot remoteProjectSnapshot;

                if (!_remote.Projects.TryGetValue(pair.Key, out remoteProjectSnapshot))
                {
                    remoteProjectSnapshot      = new ProjectSnapshot();
                    _remote.Projects[pair.Key] = remoteProjectSnapshot;
                }

                if (localProjectSnapshot.DependencyDiagnostics != null)
                {
                    diagnostics.Add(new DiagnosticMessageGroup(
                                        localProjectSnapshot.TargetFramework,
                                        localProjectSnapshot.DependencyDiagnostics));
                }

                unprocessedFrameworks.Remove(pair.Key);

                foreach (var messenger in _messengers)
                {
                    messenger.UpdateRemote(localProjectSnapshot,
                                           remoteProjectSnapshot);
                }
            }

            // Remove all processed frameworks from the remote view
            foreach (var framework in unprocessedFrameworks)
            {
                _remote.Projects.Remove(framework);
            }
        }
        private bool UpdateProjectStates()
        {
            ProjectState state = null;

            if (_appPath.WasAssigned || _configure.WasAssigned || _filesChanged.WasAssigned || _refreshDependencies.WasAssigned)
            {
                _appPath.ClearAssigned();
                _configure.ClearAssigned();
                _filesChanged.ClearAssigned();
                _refreshDependencies.ClearAssigned();

                state = ProjectState.Create(_appPath.Value, _configure.Value, _workspaceContext, _remote.ProjectSearchPaths);
            }

            if (state == null)
            {
                return(false);
            }

            _local = Snapshot.CreateFromProject(state.Project);
            _local.ProjectDiagnostics = state.Diagnostics;

            foreach (var projectInfo in state.Projects)
            {
                var projectWorkd = new ProjectSnapshot
                {
                    RootDependency        = projectInfo.RootDependency,
                    TargetFramework       = projectInfo.Framework,
                    SourceFiles           = new List <string>(projectInfo.SourceFiles),
                    CompilerOptions       = projectInfo.CompilerOptions,
                    ProjectReferences     = projectInfo.ProjectReferences,
                    FileReferences        = projectInfo.CompilationAssembiles,
                    DependencyDiagnostics = projectInfo.DependencyDiagnostics,
                    Dependencies          = projectInfo.Dependencies
                };

                _local.Projects[projectInfo.Framework] = projectWorkd;
            }

            return(true);
        }