Ejemplo n.º 1
0
        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));
        }
Ejemplo n.º 2
0
        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("");
            }
        }
Ejemplo n.º 3
0
 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);
 }
Ejemplo n.º 4
0
        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);
            }
        }
Ejemplo n.º 5
0
 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;
     }
 }
Ejemplo n.º 6
0
        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);
        }
Ejemplo n.º 7
0
		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);
		}
Ejemplo n.º 8
0
        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);
        }
Ejemplo n.º 9
0
		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);
		}
Ejemplo n.º 10
0
        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);
        }
Ejemplo n.º 11
0
        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)
		{
		}
Ejemplo n.º 13
0
		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;
			}
		}
Ejemplo n.º 14
0
		internal override void Write (XmlWriter writer, WriteContext context)
		{
			base.Write (writer, context);
		}
Ejemplo n.º 15
0
        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;
            }
        }
Ejemplo n.º 16
0
		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 ("");
			}
		}
Ejemplo n.º 17
0
		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);
		}
Ejemplo n.º 18
0
 internal override void Write(XmlWriter writer, WriteContext context)
 {
     MSBuildWhitespace.Write(StartWhitespace, writer);
     writer.WriteComment(Value);
     MSBuildWhitespace.Write(EndWhitespace, writer);
 }
Ejemplo n.º 19
0
 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);
		}
Ejemplo n.º 21
0
		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);
		}
Ejemplo n.º 23
0
		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);
		}
Ejemplo n.º 24
0
 internal virtual void Write(XmlWriter writer, WriteContext context)
 {
 }
Ejemplo n.º 25
0
		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 ();
		}
Ejemplo n.º 26
0
 void Save(XmlWriter writer, WriteContext ctx)
 {
     Write(writer, ctx);
 }
Ejemplo n.º 27
0
		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;
			}
		}