Esempio n. 1
0
        public IEnumerable <SolutionFileProjectFileReference> ListRootProjectFiles(SolutionFile solutionFile, string solutionFilePath)
        {
            // Select all non solution-folder guids.
            var solutionFolderProjectTypeGuid = this.VisualStudioSolutionFolderProjectTypeGuidProvider.GetVisualStudioSolutionFolderProjectTypeGuid();

            var allNonSolutionFolderGUIDs = solutionFile.SolutionFileProjectReferences.Where(x => x.ProjectTypeGUID != solutionFolderProjectTypeGuid).Select(x => x.ProjectGUID);

            // Select all project GUIDs that are in a solution folder.
            var nestedProjectsGlobalSection = solutionFile.GlobalSections.AcquireNestedProjectsGlobalSection();

            var allChildGUIDs = nestedProjectsGlobalSection.ProjectNestings.Select(x => x.ChildProjectGUID).Distinct();

            var rootProjectGUIDs = allNonSolutionFolderGUIDs.Except(allChildGUIDs);

            var rootProjects = solutionFile.SolutionFileProjectReferences.Where(x => rootProjectGUIDs.Contains(x.ProjectGUID)).Select(x =>
            {
                var projectFilePath = this.StringlyTypedPathOperator.GetProjectFilePath(solutionFilePath, x.ProjectFileRelativePathValue);

                var projectFileReference = new SolutionFileProjectFileReference()
                {
                    ProjectFilePathValue = projectFilePath,
                    ProjectGUID          = x.ProjectGUID,
                    ProjectName          = x.ProjectName,
                    ProjectTypeGUID      = x.ProjectTypeGUID,
                };
                return(projectFileReference);
            });

            return(rootProjects);
        }
Esempio n. 2
0
        public IEnumerable <SolutionFileProjectFileReference> ListSolutionFolderProjectFiles(SolutionFile solutionFile, string solutionFilePath, string solutionFolderPath)
        {
            var hasSolutionFolder = this.HasSolutionFolder(solutionFile, solutionFolderPath, out var solutionFolder);

            if (!hasSolutionFolder)
            {
                throw new Exception($"Solution folder path does not exist: {solutionFolderPath}");
            }

            var nestedProjectsGlobalSection = solutionFile.GlobalSections.AcquireNestedProjectsGlobalSection();

            var childProjectGUIDs = nestedProjectsGlobalSection.ProjectNestings.Where(x => x.ParentProjectGUID == solutionFolder.ProjectGUID).Select(x => x.ChildProjectGUID);

            var solutionFolderProjectTypeGuid = this.VisualStudioSolutionFolderProjectTypeGuidProvider.GetVisualStudioSolutionFolderProjectTypeGuid();

            var childProjectReferences = solutionFile.SolutionFileProjectReferences.Where(x => x.ProjectTypeGUID != solutionFolderProjectTypeGuid && childProjectGUIDs.Contains(x.ProjectGUID));

            foreach (var childProjectReference in childProjectReferences)
            {
                var projectFilePath = this.StringlyTypedPathOperator.GetProjectFilePath(solutionFilePath, childProjectReference.ProjectFileRelativePathValue);

                var childProjectFileReference = new SolutionFileProjectFileReference()
                {
                    ProjectFilePathValue = projectFilePath,
                    ProjectName          = childProjectReference.ProjectName,
                    ProjectGUID          = childProjectReference.ProjectGUID,
                    ProjectTypeGUID      = childProjectReference.ProjectTypeGUID,
                };
                yield return(childProjectFileReference);
            }
        }
Esempio n. 3
0
        public bool HasProjectFile(SolutionFile solutionFile, string solutionFilePath, string projectFilePath, out SolutionFileProjectFileReference projectFileReference)
        {
            var hasProjectFile = this.HasProjectReference(solutionFile, solutionFilePath, projectFilePath, out var projectReference);

            var computedProjectFilePath = this.StringlyTypedPathOperator.GetProjectFilePath(solutionFilePath, projectReference.ProjectFileRelativePathValue);

            if (computedProjectFilePath != projectFilePath)
            {
                throw new Exception($"Mismatch in project file paths:\nComputed: {computedProjectFilePath}\nInput: {projectFilePath}");
            }

            projectFileReference = new SolutionFileProjectFileReference()
            {
                ProjectFilePathValue = computedProjectFilePath,
                ProjectName          = projectReference.ProjectName,
                ProjectGUID          = projectReference.ProjectGUID,
                ProjectTypeGUID      = projectReference.ProjectTypeGUID,
            };

            return(hasProjectFile);
        }
Esempio n. 4
0
        public IEnumerable <SolutionFileProjectFileReference> ListProjectFileReferences(SolutionFile solutionFile, string solutionFilePath)
        {
            var solutionFolderProjectTypeGuid = this.VisualStudioSolutionFolderProjectTypeGuidProvider.GetVisualStudioSolutionFolderProjectTypeGuid();

            foreach (var projectReference in solutionFile.SolutionFileProjectReferences)
            {
                // Filter out solution folders.
                if (projectReference.ProjectTypeGUID == solutionFolderProjectTypeGuid)
                {
                    continue;
                }

                var projectFilePath = this.StringlyTypedPathOperator.GetProjectFilePath(solutionFilePath, projectReference.ProjectFileRelativePathValue);

                var projectFileReference = new SolutionFileProjectFileReference()
                {
                    ProjectFilePathValue = projectFilePath,
                    ProjectGUID          = projectReference.ProjectGUID,
                    ProjectName          = projectReference.ProjectName,
                    ProjectTypeGUID      = projectReference.ProjectTypeGUID,
                };
                yield return(projectFileReference);
            }
        }
        public static bool SolutionFolderContainsProjectFile(this IVisualStudioSolutionFileOperator visualStudioSolutionFileOperator, SolutionFile solutionFile, string solutionFilePath, string projectFilePath, string solutionFolderPath, out SolutionFileProjectFileReference childProjectFileReference)
        {
            var childProjectFileReferences = visualStudioSolutionFileOperator.ListSolutionFolderProjectFiles(solutionFile, solutionFilePath, solutionFolderPath);

            childProjectFileReference = childProjectFileReferences.Where(x => x.ProjectFilePathValue == projectFilePath).SingleOrDefault();

            var childProjectFileExists = childProjectFileReference != default;

            return(childProjectFileExists);
        }