void OnSolutionConfiguration(object sender, SolutionConfigurationEventArgs e)
        {
            if (!ReadNPMProjects(e.Monitor))
            {
                e.PreventSolutionUse("NPM project error.");
                return;
            }
            if (!ReadAngularWorkspace(e.Monitor))
            {
                e.PreventSolutionUse("NPM project error inside an Angular Workspace.");
            }

            bool somePublished = false;

            //Dependency model stuff: ensuring project, adding generated artifacts and synchronize the package references.
            foreach (var p in AllNpmProjects)
            {
                var(project, isNew) = e.Solution.AddOrFindProject(p.Specification.Folder, "js", p.PackageJson.SafeName);
                p.Associate(project);
                if (isNew)
                {
                    if (p.PackageJson.IsPublished) //add generated artifact if needed.
                    {
                        project.AddGeneratedArtifacts(new Artifact(NPMClient.NPMType, p.PackageJson.Name));
                        somePublished = true;
                    }
                }
                p.SynchronizePackageReferences(e.Monitor);
            }


            foreach (var p in AllNpmProjects)
            {
                if (!p.SynchronizeProjectReferences(e.Monitor))    //Project reference
                {
                    e.PreventSolutionUse("NPM project path relative error.");
                }
            }
            if (!AllNpmProjects.Any())
            {
                var sources = e.Solution.ArtifactSources.Where(s => s.ArtifactType == NPMClient.NPMType).ToList();
                if (sources.Count > 0)
                {
                    e.Monitor.Info($"Removing sources: {sources.Select( t => t.TypedName ).Concatenate()} since there is no NPM projetcs.");
                    foreach (var s in sources)
                    {
                        e.Solution.RemoveArtifactSource(s);
                    }
                }
            }
            if (!somePublished)
            {
                var targets = e.Solution.ArtifactTargets.Where(t => t.HandleArtifactType(NPMClient.NPMType)).ToList();
                if (targets.Count > 0)
                {
                    e.Monitor.Info($"Removing targets: {targets.Select( t => t.UniqueRepositoryName ).Concatenate()} since no published NPM projetcs exist.");
                    foreach (var t in targets)
                    {
                        e.Solution.RemoveArtifactTarget(t);
                    }
                }
            }
        }