Example #1
0
        /// <summary>
        /// Loads visual studio .sln solution
        /// </summary>
        /// <param name="solutionFileName"></param>
        /// <exception cref="System.IO.FileNotFoundException">The file specified in path was not found.</exception>
        public Solution(string solutionFileName)
        {
            _solutionFileName = solutionFileName;
            _slnLines = new List<object>();
            var slnTxt = File.ReadAllText(solutionFileName);
            //Match string like: Project("{66666666-7777-8888-9999-AAAAAAAAAAAA}") = "ProjectName", "projectpath.csproj", "{11111111-2222-3333-4444-555555555555}"
            var projMatcher = new Regex("Project\\(\"(?<ParentProjectGuid>{[A-F0-9-]+})\"\\) = \"(?<ProjectName>.*?)\", \"(?<RelativePath>.*?)\", \"(?<ProjectGuid>{[A-F0-9-]+})");

            Regex.Replace(slnTxt, "^(.*?)[\n\r]*$", m =>
                    {
                        String line = m.Groups[1].Value;
                        Match m2 = projMatcher.Match(line);
                        if (m2.Groups.Count < 2)
                        {
                            _slnLines.Add(line);
                            return "";
                        }

                        var s = new SolutionProject();
                        // "0" - RegEx special kind of group
                        foreach (String g in projMatcher.GetGroupNames().Where(x => x != "0"))
                            s.GetType().GetField(g).SetValue(s, m2.Groups[g].ToString());

                        _slnLines.Add(s);
                        return "";
                    },
                    RegexOptions.Multiline);
        }
Example #2
0
        /// <summary>
        /// Loads visual studio .sln solution
        /// </summary>
        /// <param name="solutionFileName"></param>
        /// <exception cref="System.IO.FileNotFoundException">The file specified in path was not found.</exception>
        public Solution(string solutionFileName)
        {
            _solutionFileName = solutionFileName;
            _slnLines         = new List <object>();
            var slnTxt = File.ReadAllText(solutionFileName);
            //Match string like: Project("{66666666-7777-8888-9999-AAAAAAAAAAAA}") = "ProjectName", "projectpath.csproj", "{11111111-2222-3333-4444-555555555555}"
            var projMatcher = new Regex("Project\\(\"(?<ParentProjectGuid>{[A-F0-9-]+})\"\\) = \"(?<ProjectName>.*?)\", \"(?<RelativePath>.*?)\", \"(?<ProjectGuid>{[A-F0-9-]+})");

            Regex.Replace(slnTxt, "^(.*?)[\n\r]*$", m =>
            {
                String line = m.Groups[1].Value;
                Match m2    = projMatcher.Match(line);
                if (m2.Groups.Count < 2)
                {
                    _slnLines.Add(line);
                    return("");
                }

                var s = new SolutionProject();
                // "0" - RegEx special kind of group
                foreach (String g in projMatcher.GetGroupNames().Where(x => x != "0"))
                {
                    s.GetType().GetField(g).SetValue(s, m2.Groups[g].ToString());
                }

                _slnLines.Add(s);
                return("");
            },
                          RegexOptions.Multiline);
        }
Example #3
0
        /// <summary>
        /// Removes a project from a solution
        /// </summary>
        /// <param name="project">Project to remove</param>
        public void RemoveProject(SolutionProject project)
        {
            if (!_slnLines.Contains(project))
            {
                return;
            }

            var guid  = project.ProjectGuid;
            var index = _slnLines.FindIndex(p => p == project);

            _slnLines.RemoveRange(index, 2);

            _slnLines.RemoveAll(l =>
            {
                var line = l as string;
                return(!string.IsNullOrEmpty(line) && line.Contains(guid));
            });
        }
Example #4
0
        /// <summary>
        /// Removes a project from a solution
        /// </summary>
        /// <param name="project">Project to remove</param>
        public void RemoveProject(SolutionProject project)
        {
            if (!_slnLines.Contains(project)) return;

            var guid = project.ProjectGuid;
            var index = _slnLines.FindIndex(p => p == project);
            _slnLines.RemoveRange(index, 2);

            _slnLines.RemoveAll(l =>
            {
                var line = l as string;
                return !string.IsNullOrEmpty(line) && line.Contains(guid);
            });
        }