Пример #1
0
        public void LoadProjectTest()
        {
            var s = new Solution();

            s.LoadSolution(GetTestSolutionPath());
            var p = new SolutionProject(s);

            p.LoadProject(GetTestProjectPath());
        }
Пример #2
0
        private string GetAbsolutePath(Settings settings, SolutionProject project)
        {
            string path = null;

            if (global)
            {
                path = System.IO.Path.Combine(settings.ConfigRoot, this.path);
            }
            else
            {
                path = System.IO.Path.GetDirectoryName(project.GetProjectAbsolutePath());
                path = System.IO.Path.Combine(path, this.path);
            }

            path = System.IO.Path.GetFullPath(path);
            return(path);
        }
Пример #3
0
        public XmlDocument LoadIncludeFile(Settings settings, SolutionProject project)
        {
            var path = GetAbsolutePath(settings, project);

            try
            {
                var xml = new XmlDocument();
                xml.Load(path);
                return(xml);
            }
            catch (XmlException ex)
            {
                throw Error.XmlFormatError(ex, path);
            }
            catch (Exception ex)
            {
                throw Error.XmlLoadError(ex, path);
            }
        }
Пример #4
0
        public void LoadSolution(string path)
        {
            this.path     = path;
            this.projects = new List <SolutionProject>();

            var parser_type           = Type.GetType("Microsoft.Build.Construction.SolutionParser, Microsoft.Build, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a");
            var parser_solutionReader = parser_type.GetProperty("SolutionReader", BindingFlags.NonPublic | BindingFlags.Instance);
            var parser_parseSolution  = parser_type.GetMethod("ParseSolution", BindingFlags.NonPublic | BindingFlags.Instance);
            var parser_projects       = parser_type.GetProperty("Projects", BindingFlags.NonPublic | BindingFlags.Instance);
            var project_type          = Type.GetType("Microsoft.Build.Construction.ProjectInSolution, Microsoft.Build, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a", false, false);
            var project_ProjectName   = project_type.GetProperty("ProjectName", BindingFlags.NonPublic | BindingFlags.Instance);
            var project_RelativePath  = project_type.GetProperty("RelativePath", BindingFlags.NonPublic | BindingFlags.Instance);
            var project_ProjectType   = project_type.GetProperty("ProjectType", BindingFlags.NonPublic | BindingFlags.Instance);

            var parser = parser_type.GetConstructors(BindingFlags.Instance | BindingFlags.NonPublic).First().Invoke(null);

            using (var streamReader = new StreamReader(path))
            {
                parser_solutionReader.SetValue(parser, streamReader, null);
                parser_parseSolution.Invoke(parser, null);
            }

            var array = (Array)parser_projects.GetValue(parser, null);

            for (int i = 0; i < array.Length; i++)
            {
                var project = array.GetValue(i);
                var type    = (Microsoft.Build.Construction.SolutionProjectType)project_ProjectType.GetValue(project);
                if ((type & Microsoft.Build.Construction.SolutionProjectType.KnownToBeMSBuildFormat) != 0)
                {
                    var pp = (string)project_RelativePath.GetValue(project);
                    var p  = new SolutionProject(this);
                    p.LoadProject(pp);
                    projects.Add(p);
                }
            }
        }
Пример #5
0
        public static ConfigException MissingBaseConfig(SolutionProject project)
        {
            var msg = String.Format(ErrorMessages.MissingBaseConfig, project.Name);

            return(new ConfigException(msg));
        }