/// <summary> /// Parse a ProjectTaskElement /// </summary> private ProjectTaskElement ParseProjectTaskElement(XmlElementWithLocation element, ProjectTargetElement parent) { foreach (XmlAttributeWithLocation attribute in element.Attributes) { ProjectErrorUtilities.VerifyThrowInvalidProject ( !XMakeAttributes.IsBadlyCasedSpecialTaskAttribute(attribute.Name), attribute.Location, "BadlyCasedSpecialTaskAttribute", attribute.Name, element.Name, element.Name ); } ProjectTaskElement task = new ProjectTaskElement(element, parent, _project); foreach (XmlElementWithLocation childElement in ProjectXmlUtilities.GetVerifyThrowProjectChildElements(element)) { ProjectErrorUtilities.VerifyThrowInvalidProject(childElement.Name == XMakeElements.output, childElement.Location, "UnrecognizedChildElement", childElement.Name, task.Name); ProjectOutputElement output = ParseProjectOutputElement(childElement, task); task.AppendParentedChildNoChecks(output); } return(task); }
/// <summary> /// Creates an unparented ProjectOutputElement, wrapping an unparented XmlElement. /// Validates the parameters. /// Exactly one of item name and property name must have a value. /// Caller should then ensure the element is added to a parent /// </summary> internal static ProjectOutputElement CreateDisconnected(string taskParameter, string itemType, string propertyName, ProjectRootElement containingProject) { ErrorUtilities.VerifyThrowArgument ( (String.IsNullOrEmpty(itemType) ^ String.IsNullOrEmpty(propertyName)), "OM_EitherAttributeButNotBoth", XMakeElements.output, XMakeAttributes.propertyName, XMakeAttributes.itemName ); XmlElementWithLocation element = containingProject.CreateElement(XMakeElements.output); var output = new ProjectOutputElement(element, containingProject) { TaskParameter = taskParameter }; if (!String.IsNullOrEmpty(itemType)) { output.ItemType = itemType; } else { output.PropertyName = propertyName; } return output; }