Пример #1
0
 private void ProcessImport(XmlNode node,
     string parentProjectFilename,
     ParsedProject project)
 {
     string importFilename = node.Attributes["Project"].InnerText;
     ScanProject(importFilename, project);
 }
Пример #2
0
 private void ProcessPropertyGroup(XmlNode node,
     string parentProjectFilename,
     ParsedProject project)
 {
     foreach (XmlNode property in node.ChildNodes)
     {
         if (property.NodeType == XmlNodeType.Element)
         {
             project.AddBuildProperty(property.LocalName, property.InnerText);
         }
     }
 }
Пример #3
0
        private void ProcessTargetNode(XmlNode node,
            string parentProjectFilename,
            ParsedProject project)
        {
            string name = node.Attributes["Name"].InnerText;
            XmlNode dependsOnTargets = node.Attributes.GetNamedItem("DependsOnTargets");
            string dependencies = string.Empty;
            if (dependsOnTargets != null)
            {
                dependencies = dependsOnTargets.InnerText;
            }

            Target target = project.AddTarget(name, dependencies, parentProjectFilename);

            foreach (XmlNode child in node.ChildNodes)
            {
                if (child.NodeType == XmlNodeType.Element)
                {
                    if (child.LocalName == "MSBuild")
                    {
                        XmlNode childProjects = child.Attributes.GetNamedItem("Projects");
                        if (childProjects != null)
                        {
                            ScanProject(childProjects.InnerText, project);

                            XmlNode targets = child.Attributes.GetNamedItem("Targets");
                            if (targets != null)
                            {
                                string projectFile = project.GetExpandedRelativeFilename(childProjects.InnerText);
                                string dependencyList = targets.InnerText;
                                target.AddRemoteDependencyList(projectFile, dependencyList);
                            }
                        }
                    }
                    if (child.LocalName == "CallTarget")
                    {
                        XmlNode targets = child.Attributes.GetNamedItem("Targets");
                        if (targets != null)
                        {
                            target.AddItemToDependencyList(targets.InnerText);
                        }
                    }
                }
            }
        }
Пример #4
0
        private static void Main(string[] args)
        {
            string filename = GetArgument(args, 0, Path.Combine(Environment.CurrentDirectory, "build.proj"));
            string baseDirectoryName = Path.GetDirectoryName(filename);
            if (baseDirectoryName.Length == 0)
            {
                filename = Path.Combine(Environment.CurrentDirectory, filename);
            }
            else
            {
                Environment.CurrentDirectory = baseDirectoryName;
            }
            string outputFolder = GetArgument(args, 1, baseDirectoryName);

            ProjectParser parser = new ProjectParser();
            ParsedProject project = new ParsedProject(filename);
            parser.ScanProject(filename, project);

            project.BuildTree();

            project.WriteReport(outputFolder);
        }
Пример #5
0
        public void ScanProject(string filename, ParsedProject project)
        {
            Dictionary<string, NodeProcessing> processingActions =
                new Dictionary<string, NodeProcessing>
            {
                { "PropertyGroup", ProcessPropertyGroup },
                { "Import", ProcessImport },
                { "Target", ProcessTargetNode }
            };

            string expandedFilename = project.ExpandTokens(filename);

            if (project.HasProjectBeenParsed(expandedFilename))
            {
                return;
            }

            project.AddProjectFile(expandedFilename);

            string extension = Path.GetExtension(expandedFilename).ToUpper().Trim();
            if (extension == ".SLN")
            {
                return;
            }

            XmlDocument projectFile = new XmlDocument();
            projectFile.Load(expandedFilename);

            foreach (XmlNode node in projectFile.DocumentElement.ChildNodes)
            {
                string localName = node.LocalName;
                if (processingActions.ContainsKey(localName))
                {
                    processingActions[localName](node, filename, project);
                }
            }
        }