void LoadElement(XmlElement node, IReadOnlyFileSystem fileSystem) { switch (node.Name) { case "Options": ProjectTemplateImpl.WarnObsoleteNode(node, "Options are no longer supported, use properties instead."); break; case "CreateActions": LoadCreateActions(node); break; case "PreCreateActions": LoadPreCreateActions(node); break; case "ProjectItems": LoadProjectItems(node); break; case "Files": LoadFiles(node, fileSystem); break; case "Imports": LoadImports(node); break; case "PropertyGroup": LoadPropertyGroup(node); break; case "Include": TemplateLoadException.AssertAttributeExists(node, "src"); FileName includeFileName = FileName.Create(node.GetAttribute("src")); try { XmlDocument doc = new XmlDocument(); using (var stream = fileSystem.OpenRead(includeFileName)) { doc.Load(stream); } doc.DocumentElement.SetAttribute("fileName", includeFileName); var fileSystemForInclude = new ReadOnlyChrootFileSystem(fileSystem, includeFileName.GetParentDirectory()); if (doc.DocumentElement.Name == "Include") { LoadElementChildren(doc.DocumentElement, fileSystemForInclude); } else { LoadElement(doc.DocumentElement, fileSystemForInclude); } } catch (XmlException ex) { throw new TemplateLoadException("Error loading include file " + includeFileName, ex); } break; default: throw new TemplateLoadException("Unknown node in <Project>: " + node.Name); } }
public FileDescriptionTemplate(XmlElement xml, IReadOnlyFileSystem fileSystem) { TemplateLoadException.AssertAttributeExists(xml, "name"); this.FileSystem = fileSystem; name = xml.GetAttribute("name"); language = xml.GetAttribute("language"); if (xml.HasAttribute("buildAction")) { itemType = xml.GetAttribute("buildAction"); } foreach (XmlAttribute attribute in xml.Attributes) { string attributeName = attribute.Name; if (!knownAttributes.Contains(attributeName)) { if (attributeName == "copyToOutputDirectory") { ProjectTemplateImpl.WarnObsoleteAttribute(xml, attributeName, "Use upper-case attribute names for MSBuild metadata values!"); attributeName = "CopyToOutputDirectory"; } if (attributeName == "dependentUpon") { ProjectTemplateImpl.WarnObsoleteAttribute(xml, attributeName, "Use upper-case attribute names for MSBuild metadata values!"); attributeName = "DependentUpon"; } if (attributeName == "subType") { ProjectTemplateImpl.WarnObsoleteAttribute(xml, attributeName, "Use upper-case attribute names for MSBuild metadata values!"); attributeName = "SubType"; } metadata[attributeName] = attribute.Value; } } if (xml.HasAttribute("src")) { FileName fileName = FileName.Create(StringParser.Parse(xml.GetAttribute("src"))); try { if (xml.HasAttribute("binary") && bool.Parse(xml.GetAttribute("binary"))) { binaryFileName = fileName; } else { content = fileSystem.ReadAllText(fileName); } } catch (Exception e) { content = "Error reading content from " + fileName + ":\n" + e.ToString(); LoggingService.Warn(content); } } else { content = xml.InnerText; } }
void LoadImports(XmlElement importsElement) { if (string.Equals(importsElement.GetAttribute("clear"), "true", StringComparison.OrdinalIgnoreCase)) { clearExistingImports = true; } if (importsElement.HasAttribute("failureMessage")) { importsFailureMessage = importsElement.GetAttribute("failureMessage"); } foreach (XmlElement importElement in ChildElements(importsElement)) { TemplateLoadException.AssertAttributeExists(importElement, "Project"); projectImports.Add(new Import( importElement.GetAttribute("Project"), importElement.HasAttribute("Condition") ? importElement.GetAttribute("Condition") : null )); } }