private void ProcessImport(XmlNode node, string parentProjectFilename, ParsedProject project) { string importFilename = node.Attributes["Project"].InnerText; ScanProject(importFilename, project); }
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); } } }
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); } } } } }
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); }
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); } } }