internal string GetInnerXml() { if (StartInnerWhitespace == null && EndInnerWhitespace == null && ChildNodes.Count == 0) { return(string.Empty); } var c = new WriteContext(); StringWriter sb = new StringWriter(); var xw = XmlWriter.Create(sb, new XmlWriterSettings { OmitXmlDeclaration = true, NewLineChars = ParentProject.TextFormat.NewLine, NewLineHandling = NewLineHandling.None }); using (xw) { xw.WriteStartElement("a"); WriteContent(xw, c); xw.WriteEndElement(); } var s = sb.ToString(); int si = s.IndexOf('>') + 1; int ei = s.LastIndexOf('<'); if (ei < si) { return(string.Empty); } return(s.Substring(si, ei - si)); }
internal virtual void WriteContent(XmlWriter writer, WriteContext context) { var children = GetChildren(); var hasChildren = children.Any(); var hasContent = StartInnerWhitespace != null || EndInnerWhitespace != null; if (hasChildren || emptyElementMode == EmptyElementMode.NotEmpty || (emptyElementMode == EmptyElementMode.Unknown && !PreferEmptyElement)) { MSBuildWhitespace.Write(StartInnerWhitespace, writer); foreach (var c in GetChildren()) { c.Write(writer, context); hasContent = true; } MSBuildWhitespace.Write(EndInnerWhitespace, writer); } if (!hasContent && (emptyElementMode == EmptyElementMode.NotEmpty || (emptyElementMode == EmptyElementMode.Unknown && !PreferEmptyElement))) { // Don't write an empty element if it wasn't read as an empty element writer.WriteString(""); } }
internal override void WriteContent(XmlWriter writer, WriteContext context) { MSBuildWhitespace.Write(StartInnerWhitespace, writer); if (rawValue != null) { if (!object.ReferenceEquals(rawValue, EmptyElementMarker)) { if (rawValue.Length == 0 && !WasReadAsEmptyElement) { writer.WriteString(""); // Keep the non-empty element } else { writer.WriteRaw(rawValue); } } } else if (textValue != null) { writer.WriteValue(textValue); } else { WriteValue(writer, context, unevaluatedValue); } MSBuildWhitespace.Write(EndInnerWhitespace, writer); }
internal MSBuildProjectInstanceInfo LoadNativeInstance() { lock (readLock) { var supportsMSBuild = UseMSBuildEngine && GetGlobalPropertyGroup().GetValue("UseMSBuildEngine", true); if (engineManager == null) { engineManager = new MSBuildEngineManager(); engineManagerIsLocal = true; } MSBuildEngine e = engineManager.GetEngine(supportsMSBuild); if (nativeProjectInfo != null && nativeProjectInfo.Engine != null && (nativeProjectInfo.Engine != e || nativeProjectInfo.ProjectStamp != ChangeStamp)) { nativeProjectInfo.Engine.UnloadProject(nativeProjectInfo.Project); nativeProjectInfo = null; } if (nativeProjectInfo == null) { nativeProjectInfo = new MSBuildProjectInstanceInfo { Engine = e, ProjectStamp = ChangeStamp }; } if (nativeProjectInfo.Project == null) { // Use a private metadata property to assign an id to each item. This id is used to match // evaluated items with the items that generated them. try { DisableChangeTracking(); var ctx = new WriteContext { Evaluating = true, ItemMap = new Dictionary <string, MSBuildItem> () }; var xml = SaveToString(ctx); foreach (var it in GetAllItems()) { it.EvaluatedItemCount = 0; } nativeProjectInfo.Project = e.LoadProject(this, xml, FileName); } catch (Exception ex) { // If the project can't be evaluated don't crash LoggingService.LogError("MSBuild project could not be evaluated", ex); throw new ProjectEvaluationException(this, ex.Message); } finally { EnableChangeTracking(); } } return(nativeProjectInfo); } }
internal override void Write(XmlWriter writer, WriteContext context) { base.Write(writer, context); if (context.Evaluating) { string id = context.ItemMap.Count.ToString(); context.ItemMap [id] = this; } }
internal override void Write(XmlWriter writer, WriteContext context) { MSBuildWhitespace.Write(StartWhitespace, writer); writer.WriteStartElement(NamespacePrefix, GetElementName(), Namespace); if (unknownAttributes != null) { int unknownIndex = 0; int knownIndex = 0; var knownAtts = attributeOrder ?? GetKnownAttributes(); string lastAttr = null; do { if (unknownIndex < unknownAttributes.Length && (lastAttr == unknownAttributes [unknownIndex].AfterAttribute || unknownAttributes [unknownIndex].AfterAttribute == null)) { var att = unknownAttributes [unknownIndex++]; writer.WriteAttributeString(att.Prefix, att.LocalName, att.Namespace, att.Value); lastAttr = att.LocalName; } else if (knownIndex < knownAtts.Length) { var aname = knownAtts [knownIndex++]; lastAttr = aname; var val = WriteAttribute(aname); if (val != null) { writer.WriteAttributeString(aname, val); } } else { lastAttr = null; } } while (unknownIndex < unknownAttributes.Length || knownIndex < knownAtts.Length); } else { var knownAtts = attributeOrder ?? GetKnownAttributes(); for (int i = 0; i < knownAtts.Length; i++) { var aname = knownAtts [i]; var val = WriteAttribute(aname); if (val != null) { writer.WriteAttributeString(aname, val); } } } WriteContent(writer, context); writer.WriteEndElement(); MSBuildWhitespace.Write(EndWhitespace, writer); }
internal override void Write (XmlWriter writer, WriteContext context) { if (context.Evaluating) { var newTarget = MSBuildProjectService.GetImportRedirect (target); if (newTarget != null) { WritePatchedImport (writer, newTarget); return; } } base.Write (writer, context); }
internal override void Write(XmlWriter writer, WriteContext context) { if (context.Evaluating) { var newTarget = MSBuildProjectService.GetImportRedirect(target); if (newTarget != null) { WritePatchedImport(writer, newTarget); return; } } base.Write(writer, context); }
internal override void WriteContent (XmlWriter writer, WriteContext context) { MSBuildWhitespace.Write (StartInnerWhitespace, writer); if (rawValue != null) { if (!object.ReferenceEquals (rawValue, EmptyElementMarker)) { if (rawValue.Length == 0 && !WasReadAsEmptyElement) writer.WriteString (""); // Keep the non-empty element else writer.WriteRaw (rawValue); } } else if (textValue != null) { writer.WriteValue (textValue); } else { WriteValue (writer, context, unevaluatedValue); } MSBuildWhitespace.Write (EndInnerWhitespace, writer); }
void WriteValue(XmlWriter writer, WriteContext context, string value) { if (value == null) { value = string.Empty; } // This code is from Microsoft.Build.Internal.Utilities if (value.IndexOf('<') != -1) { // If the value looks like it probably contains XML markup ... try { var sr = new StringReader("<a>" + value + "</a>"); var elem = new MSBuildXmlElement(); using (var xr = new XmlTextReader(sr)) { xr.MoveToContent(); var cr = new MSBuildXmlReader { XmlReader = xr }; elem.Read(cr); } elem.ParentNode = this; elem.SetNamespace(Namespace); elem.StartWhitespace = StartWhitespace; elem.EndWhitespace = EndWhitespace; elem.ResetChildrenIndent(); elem.WriteContent(writer, context); return; } catch (XmlException) { // But that may fail, in the event that "value" is not really well-formed // XML. Eat the exception and fall through below ... } } // The value does not contain valid XML markup. Write it as text, so it gets // escaped properly. writer.WriteValue(value); }
string SaveToString(WriteContext ctx) { // StringWriter.Encoding always returns UTF16. We need it to return UTF8, so the // XmlDocument will write the UTF8 header. ProjectWriter sw = new ProjectWriter(format.ByteOrderMark); sw.NewLine = format.NewLine; var xw = XmlWriter.Create(sw, new XmlWriterSettings { OmitXmlDeclaration = !hadXmlDeclaration, NewLineChars = format.NewLine, NewLineHandling = NewLineHandling.Replace }); MSBuildWhitespace.Write(initialWhitespace, xw); Save(xw); xw.Dispose(); return(sw.ToString()); }
internal virtual void Write (XmlWriter writer, WriteContext context) { }
internal override void Write (XmlWriter writer, WriteContext context) { base.Write (writer, context); if (context.Evaluating) { string id = context.ItemMap.Count.ToString (); context.ItemMap [id] = this; } }
internal override void Write (XmlWriter writer, WriteContext context) { base.Write (writer, context); }
internal override void Write(XmlWriter writer, WriteContext context) { MSBuildWhitespace.Write(StartWhitespace, writer); writer.WriteStartElement(NamespacePrefix, GetElementName(), Namespace); var props = metadata.PropertiesAttributeOrder; if (props.Count > 0) { int propIndex = 0; int knownIndex = 0; var knownAtts = attributeOrder ?? GetKnownAttributes(); string lastAttr = null; do { if (propIndex < props.Count && (lastAttr == props [propIndex].AfterAttribute || props [propIndex].AfterAttribute == null)) { var prop = props [propIndex++]; writer.WriteAttributeString(prop.Name, prop.Value); lastAttr = prop.Name; } else if (knownIndex < knownAtts.Length) { var aname = knownAtts [knownIndex++]; lastAttr = aname; var val = WriteAttribute(aname); if (val != null) { writer.WriteAttributeString(aname, val); } } else { lastAttr = null; } } while (propIndex < props.Count || knownIndex < knownAtts.Length); } else { var knownAtts = attributeOrder ?? GetKnownAttributes(); for (int i = 0; i < knownAtts.Length; i++) { var aname = knownAtts [i]; var val = WriteAttribute(aname); if (val != null) { writer.WriteAttributeString(aname, val); } } } WriteContent(writer, context); writer.WriteEndElement(); MSBuildWhitespace.Write(EndWhitespace, writer); if (context.Evaluating) { string id = context.ItemMap.Count.ToString(); context.ItemMap [id] = this; } }
internal virtual void WriteContent (XmlWriter writer, WriteContext context) { var children = GetChildren (); var hasChildren = children.Any (); var hasContent = StartInnerWhitespace != null || EndInnerWhitespace != null; if (hasChildren || emptyElementMode == EmptyElementMode.NotEmpty || (emptyElementMode == EmptyElementMode.Unknown && !PreferEmptyElement)) { MSBuildWhitespace.Write (StartInnerWhitespace, writer); foreach (var c in GetChildren ()) { c.Write (writer, context); hasContent = true; } MSBuildWhitespace.Write (EndInnerWhitespace, writer); } if (!hasContent && (emptyElementMode == EmptyElementMode.NotEmpty || (emptyElementMode == EmptyElementMode.Unknown && !PreferEmptyElement))) { // Don't write an empty element if it wasn't read as an empty element writer.WriteString (""); } }
internal override void Write (XmlWriter writer, WriteContext context) { MSBuildWhitespace.Write (StartWhitespace, writer); writer.WriteStartElement (NamespacePrefix, GetElementName (), Namespace); if (unknownAttributes != null) { int unknownIndex = 0; int knownIndex = 0; var knownAtts = attributeOrder ?? GetKnownAttributes (); string lastAttr = null; do { if (unknownIndex < unknownAttributes.Length && (lastAttr == unknownAttributes [unknownIndex].AfterAttribute || unknownAttributes [unknownIndex].AfterAttribute == null)) { var att = unknownAttributes [unknownIndex++]; writer.WriteAttributeString (att.Prefix, att.LocalName, att.Namespace, att.Value); lastAttr = att.LocalName; } else if (knownIndex < knownAtts.Length) { var aname = knownAtts [knownIndex++]; lastAttr = aname; var val = WriteAttribute (aname); if (val != null) writer.WriteAttributeString (aname, val); } else lastAttr = null; } while (unknownIndex < unknownAttributes.Length || knownIndex < knownAtts.Length); } else { var knownAtts = attributeOrder ?? GetKnownAttributes (); for (int i = 0; i < knownAtts.Length; i++) { var aname = knownAtts [i]; var val = WriteAttribute (aname); if (val != null) writer.WriteAttributeString (aname, val); } } WriteContent (writer, context); writer.WriteEndElement (); MSBuildWhitespace.Write (EndWhitespace, writer); }
internal override void Write(XmlWriter writer, WriteContext context) { MSBuildWhitespace.Write(StartWhitespace, writer); writer.WriteComment(Value); MSBuildWhitespace.Write(EndWhitespace, writer); }
internal override void Write(XmlWriter writer, WriteContext context) { base.Write(writer, context); }
internal string GetInnerXml () { if (StartInnerWhitespace == null && EndInnerWhitespace == null && ChildNodes.Count == 0) return string.Empty; var c = new WriteContext (); StringWriter sb = new StringWriter (); var xw = XmlWriter.Create (sb, new XmlWriterSettings { OmitXmlDeclaration = true, NewLineChars = ParentProject.TextFormat.NewLine, NewLineHandling = NewLineHandling.None }); using (xw) { xw.WriteStartElement ("a"); WriteContent (xw, c); xw.WriteEndElement (); } var s = sb.ToString (); int si = s.IndexOf ('>') + 1; int ei = s.LastIndexOf ('<'); if (ei < si) return string.Empty; return s.Substring (si, ei - si); }
void Save (XmlWriter writer, WriteContext ctx) { Write (writer, ctx); }
internal override void Write (XmlWriter writer, WriteContext context) { MSBuildWhitespace.Write (StartWhitespace, writer); writer.WriteComment (Value); MSBuildWhitespace.Write (EndWhitespace, writer); }
void WriteValue (XmlWriter writer, WriteContext context, string value) { if (value == null) value = string.Empty; // This code is from Microsoft.Build.Internal.Utilities if (value.IndexOf('<') != -1) { // If the value looks like it probably contains XML markup ... try { var sr = new StringReader ("<a>"+ value + "</a>"); var elem = new MSBuildXmlElement (); using (var xr = new XmlTextReader (sr)) { xr.MoveToContent (); var cr = new MSBuildXmlReader { XmlReader = xr }; elem.Read (cr); } elem.ParentNode = this; elem.SetNamespace (MSBuildProject.Schema); elem.StartWhitespace = StartWhitespace; elem.EndWhitespace = EndWhitespace; elem.ResetChildrenIndent (); elem.WriteContent (writer, context); return; } catch (XmlException) { // But that may fail, in the event that "value" is not really well-formed // XML. Eat the exception and fall through below ... } } // The value does not contain valid XML markup. Write it as text, so it gets // escaped properly. writer.WriteValue (value); }
internal virtual void Write(XmlWriter writer, WriteContext context) { }
string SaveToString (WriteContext ctx) { // StringWriter.Encoding always returns UTF16. We need it to return UTF8, so the // XmlDocument will write the UTF8 header. ProjectWriter sw = new ProjectWriter (format.ByteOrderMark); sw.NewLine = format.NewLine; var xw = XmlWriter.Create (sw, new XmlWriterSettings { OmitXmlDeclaration = !hadXmlDeclaration, NewLineChars = format.NewLine, NewLineHandling = NewLineHandling.Replace }); MSBuildWhitespace.Write (initialWhitespace, xw); Save (xw); xw.Dispose (); return sw.ToString (); }
void Save(XmlWriter writer, WriteContext ctx) { Write(writer, ctx); }
internal MSBuildProjectInstanceInfo LoadNativeInstance () { lock (readLock) { var supportsMSBuild = UseMSBuildEngine && GetGlobalPropertyGroup ().GetValue ("UseMSBuildEngine", true); if (engineManager == null) { engineManager = new MSBuildEngineManager (); engineManagerIsLocal = true; } MSBuildEngine e = engineManager.GetEngine (supportsMSBuild); if (nativeProjectInfo != null && nativeProjectInfo.Engine != null && (nativeProjectInfo.Engine != e || nativeProjectInfo.ProjectStamp != ChangeStamp)) { nativeProjectInfo.Engine.UnloadProject (nativeProjectInfo.Project); nativeProjectInfo = null; } if (nativeProjectInfo == null) { nativeProjectInfo = new MSBuildProjectInstanceInfo { Engine = e, ProjectStamp = ChangeStamp }; } if (nativeProjectInfo.Project == null) { // Use a private metadata property to assign an id to each item. This id is used to match // evaluated items with the items that generated them. try { DisableChangeTracking (); var ctx = new WriteContext { Evaluating = true, ItemMap = new Dictionary<string, MSBuildItem> () }; var xml = SaveToString (ctx); foreach (var it in GetAllItems ()) it.EvaluatedItemCount = 0; nativeProjectInfo.Project = e.LoadProject (this, xml, FileName); } catch (Exception ex) { // If the project can't be evaluated don't crash LoggingService.LogError ("MSBuild project could not be evaluated", ex); throw new ProjectEvaluationException (this, ex.Message); } finally { EnableChangeTracking (); } } return nativeProjectInfo; } }