Ejemplo n.º 1
0
 public Task EvaluateAsync()
 {
     mainProjectInstance = new MSBuildProjectInstance(this);
     return(mainProjectInstance.EvaluateAsync().ContinueWith(t => {
         conditionedProperties = mainProjectInstance.GetConditionedProperties();
     }));
 }
Ejemplo n.º 2
0
 public void Evaluate()
 {
     if (mainProjectInstance != null)
     {
         mainProjectInstance.Dispose();
     }
     mainProjectInstance = new MSBuildProjectInstance(this);
     mainProjectInstance.Evaluate();
     conditionedProperties = mainProjectInstance.GetConditionedProperties();
 }
Ejemplo n.º 3
0
        void LoadFromXml(MSBuildXmlReader reader)
        {
            AssertCanModify();
            DisposeMainInstance();
            ChildNodes            = ChildNodes.Clear();
            conditionedProperties = new ConditionedPropertyCollection();
            bestGroups            = null;
            hadXmlDeclaration     = false;
            initialWhitespace     = null;
            StartInnerWhitespace  = null;

            while (!reader.EOF && reader.NodeType != XmlNodeType.Element)
            {
                if (reader.NodeType == XmlNodeType.XmlDeclaration)
                {
                    initialWhitespace = reader.ConsumeWhitespace();
                    hadXmlDeclaration = true;
                    reader.Read();
                }
                else if (reader.IsWhitespace)
                {
                    reader.ReadAndStoreWhitespace();
                }
                else
                {
                    reader.Read();
                }
            }

            if (reader.EOF)
            {
                return;
            }

            Read(reader);

            while (!reader.EOF)
            {
                if (reader.IsWhitespace)
                {
                    reader.ReadAndStoreWhitespace();
                }
                else
                {
                    reader.Read();
                }
            }
        }
Ejemplo n.º 4
0
        void SyncBuildProject(Dictionary <string, MSBuildItem> currentItems, MSBuildEngine e, object project)
        {
            evaluatedItemsIgnoringCondition.Clear();
            evaluatedItems.Clear();
            evaluatedItemDefinitions?.Clear();

            if (!OnlyEvaluateProperties)
            {
                foreach (var it in e.GetEvaluatedItemDefinitions(project))
                {
                    var xit = it as MSBuildItemEvaluated;
                    if (xit != null)
                    {
                        if (evaluatedItemDefinitions == null)
                        {
                            evaluatedItemDefinitions = new Dictionary <string, MSBuildPropertyGroupEvaluated> ();
                        }
                        MSBuildPropertyGroupEvaluated evalItemDefProps = null;
                        if (!evaluatedItemDefinitions.TryGetValue(xit.Name, out evalItemDefProps))
                        {
                            evalItemDefProps = new MSBuildPropertyGroupEvaluated(msproject);
                            evaluatedItemDefinitions [xit.Name] = evalItemDefProps;
                        }
                        evalItemDefProps.Sync(engine, xit, clearProperties: false);
                    }
                }

                var evalItems = new Dictionary <string, MSBuildItemEvaluated> ();
                foreach (var it in e.GetEvaluatedItems(project))
                {
                    var xit = it as MSBuildItemEvaluated;
                    if (xit == null)
                    {
                        xit = CreateEvaluatedItem(e, it);
                        var itemId = e.GetItemMetadata(it, NodeIdPropertyName);
                        var key    = itemId + " " + xit.Include;
                        if (evalItems.ContainsKey(key))
                        {
                            continue;                             // xbuild seems to return duplicate items when using wildcards. This is a workaround to avoid the duplicates.
                        }
                        MSBuildItem pit;
                        if (!string.IsNullOrEmpty(itemId) && currentItems.TryGetValue(itemId, out pit))
                        {
                            xit.AddSourceItem(pit);
                            xit.Condition   = pit.Condition;
                            evalItems [key] = xit;
                        }
                    }
                    evaluatedItems.Add(xit);
                }

                var evalItemsNoCond = new Dictionary <string, MSBuildItemEvaluated> ();
                foreach (var it in e.GetEvaluatedItemsIgnoringCondition(project))
                {
                    var xit = it as MSBuildItemEvaluated;
                    if (xit == null)
                    {
                        xit = CreateEvaluatedItem(e, it);
                        var itemId = e.GetItemMetadata(it, NodeIdPropertyName);
                        MSBuildItemEvaluated evItem;
                        var key = itemId + " " + xit.Include;
                        if (evalItemsNoCond.ContainsKey(key))
                        {
                            continue;                             // xbuild seems to return duplicate items when using wildcards. This is a workaround to avoid the duplicates.
                        }
                        if (!string.IsNullOrEmpty(itemId) && evalItems.TryGetValue(key, out evItem))
                        {
                            evaluatedItemsIgnoringCondition.Add(evItem);
                            evalItemsNoCond [key] = evItem;
                            continue;
                        }
                        MSBuildItem pit;
                        if (!string.IsNullOrEmpty(itemId) && currentItems.TryGetValue(itemId, out pit))
                        {
                            xit.AddSourceItem(pit);
                            xit.Condition         = pit.Condition;
                            evalItemsNoCond [key] = xit;
                        }
                    }
                    UpdateMetadata(xit);
                    evaluatedItemsIgnoringCondition.Add(xit);
                }

                // Clear the node id metadata
                foreach (var it in evaluatedItems.Concat(evaluatedItemsIgnoringCondition))
                {
                    ((MSBuildPropertyGroupEvaluated)it.Metadata).RemoveProperty(NodeIdPropertyName);
                }

                targets = e.GetTargets(project).ToArray();
                targetsIgnoringCondition = e.GetTargetsIgnoringCondition(project).ToArray();
            }

            var props = new MSBuildEvaluatedPropertyCollection(msproject);

            evaluatedProperties = props;
            props.SyncCollection(e, project);

            conditionedProperties = engine.GetConditionedProperties(project);
        }
		public override void CollectConditionProperties (ConditionedPropertyCollection properties)
		{
			expression.CollectConditionProperties (properties);
		}
		public override void CollectConditionProperties (ConditionedPropertyCollection properties)
		{
			if ((op == RelationOperator.Equal || op == RelationOperator.NotEqual) && left is ConditionFactorExpression && right is ConditionFactorExpression) {
				var leftString = ((ConditionFactorExpression)left).Token.Value;
				var rightString = ((ConditionFactorExpression)right).Token.Value;
				List<string> combinedProperty = null;
				List<string> combinedValue = null;

				int il = 0;
				int rl = 0;
				while (il < leftString.Length && rl < rightString.Length) {
					if (il < leftString.Length - 2 && leftString [il] == '$' && leftString [il + 1] == '(')
						ReadPropertyCondition (leftString, ref combinedProperty, ref combinedValue, ref il, rightString, ref rl);
					else if (rl < rightString.Length - 2 && rightString [rl] == '$' && rightString [rl + 1] == '(')
						ReadPropertyCondition (rightString, ref combinedProperty, ref combinedValue, ref rl, leftString, ref il);
					else if (leftString [il] != rightString [rl])
						return; // Condition can't be true
					il++; rl++;
				}

				// This condition sets values for more that one property. In addition to the individual values, also register
				// the combination of values. So for example if the condition has "$(Configuration)|$(Platform) == Foo|Bar",
				// the conditioned property collection would contain Configuration=Foo, Platform=Bar, (Configuration|Platfrom)=Foo|Bar
				if (combinedProperty != null)
					properties.AddPropertyValues (combinedProperty, combinedValue);
			}
		}
Ejemplo n.º 7
0
		public void Evaluate ()
		{
			if (mainProjectInstance != null)
				mainProjectInstance.Dispose ();
			mainProjectInstance = new MSBuildProjectInstance (this);
			mainProjectInstance.Evaluate ();
			conditionedProperties = mainProjectInstance.GetConditionedProperties ();
		}
Ejemplo n.º 8
0
		public Task EvaluateAsync ()
		{
			if (mainProjectInstance != null)
				mainProjectInstance.Dispose ();
			mainProjectInstance = new MSBuildProjectInstance (this);
			return mainProjectInstance.EvaluateAsync ().ContinueWith (t => {
				conditionedProperties = mainProjectInstance.GetConditionedProperties ();
			});
		}
Ejemplo n.º 9
0
		public void Evaluate ()
		{
			mainProjectInstance = new MSBuildProjectInstance (this);
			mainProjectInstance.Evaluate ();
			conditionedProperties = mainProjectInstance.GetConditionedProperties ();
		}
Ejemplo n.º 10
0
		void LoadFromXml (MSBuildXmlReader reader)
		{
			AssertCanModify ();
			DisposeMainInstance ();
			ChildNodes = ChildNodes.Clear ();
			conditionedProperties = new ConditionedPropertyCollection ();
			bestGroups = null;
			hadXmlDeclaration = false;
			initialWhitespace = null;
			StartInnerWhitespace = null;

			while (!reader.EOF && reader.NodeType != XmlNodeType.Element) {
				if (reader.NodeType == XmlNodeType.XmlDeclaration) {
					initialWhitespace = reader.ConsumeWhitespace ();
					hadXmlDeclaration = true;
					reader.Read ();
				}
				else if (reader.IsWhitespace)
					reader.ReadAndStoreWhitespace ();
				else
					reader.Read ();
			}

			if (reader.EOF)
				return;

			Read (reader);

			while (!reader.EOF) {
				if (reader.IsWhitespace)
					reader.ReadAndStoreWhitespace ();
				else
					reader.Read ();
			}
		}
		public override void CollectConditionProperties (ConditionedPropertyCollection properties)
		{
			left.CollectConditionProperties (properties);
			right.CollectConditionProperties (properties);
		}
Ejemplo n.º 12
0
		void SyncBuildProject (Dictionary<string,MSBuildItem> currentItems, MSBuildEngine e, object project)
		{
			evaluatedItemsIgnoringCondition.Clear ();
			evaluatedItems.Clear ();

			if (!OnlyEvaluateProperties) {
				
				var evalItems = new Dictionary<string,MSBuildItemEvaluated> ();
				foreach (var it in e.GetEvaluatedItems (project)) {
					var xit = it as MSBuildItemEvaluated;
					if (xit == null) {
						xit = CreateEvaluatedItem (e, it);
						var itemId = e.GetItemMetadata (it, NodeIdPropertyName);
						var key = itemId + " " + xit.Include;
						if (evalItems.ContainsKey (key))
							continue; // xbuild seems to return duplicate items when using wildcards. This is a workaround to avoid the duplicates.
						MSBuildItem pit;
						if (!string.IsNullOrEmpty (itemId) && currentItems.TryGetValue (itemId, out pit)) {
							xit.SourceItem = pit;
							xit.Condition = pit.Condition;
							evalItems [key] = xit;
						}
					}
					evaluatedItems.Add (xit);
				}

				var evalItemsNoCond = new Dictionary<string,MSBuildItemEvaluated> ();
				foreach (var it in e.GetEvaluatedItemsIgnoringCondition (project)) {
					var xit = it as MSBuildItemEvaluated;
					if (xit == null) {
						xit = CreateEvaluatedItem (e, it);
						var itemId = e.GetItemMetadata (it, NodeIdPropertyName);
						MSBuildItemEvaluated evItem;
						var key = itemId + " " + xit.Include;
						if (evalItemsNoCond.ContainsKey (key))
							continue; // xbuild seems to return duplicate items when using wildcards. This is a workaround to avoid the duplicates.
						if (!string.IsNullOrEmpty (itemId) && evalItems.TryGetValue (key, out evItem)) {
							evaluatedItemsIgnoringCondition.Add (evItem);
							evalItemsNoCond [key] = evItem;
							continue;
						}
						MSBuildItem pit;
						if (!string.IsNullOrEmpty (itemId) && currentItems.TryGetValue (itemId, out pit)) {
							xit.SourceItem = pit;
							xit.Condition = pit.Condition;
							evalItemsNoCond [key] = xit;
						}
					}
					evaluatedItemsIgnoringCondition.Add (xit);
				}

				// Clear the node id metadata
				foreach (var it in evaluatedItems.Concat (evaluatedItemsIgnoringCondition))
					((MSBuildPropertyGroupEvaluated)it.Metadata).RemoveProperty (NodeIdPropertyName);

				targets = e.GetTargets (project).ToArray ();
			}

			var props = new MSBuildEvaluatedPropertyCollection (msproject);
			evaluatedProperties = props;
			props.SyncCollection (e, project);

			conditionedProperties = engine.GetConditionedProperties (project);
		}
		public virtual void CollectConditionProperties (ConditionedPropertyCollection properties)
		{
		}
		void ReadPropertyCondition (ConditionedPropertyCollection properties, string propString, ref int i, string valString, ref int j)
		{ 
			var prop = ReadPropertyTag (propString, ref i);
			string val;
			if (i < propString.Length)
				val = ReadPropertyValue (valString, ref j, propString [i]);
			else
				val = valString.Substring (j);

			properties.AddProperty (prop, val);
		}
		public override void CollectConditionProperties (ConditionedPropertyCollection properties)
		{
			if ((op == RelationOperator.Equal || op == RelationOperator.NotEqual) && left is ConditionFactorExpression && right is ConditionFactorExpression) {
				var leftString = ((ConditionFactorExpression)left).Token.Value;
				var rightString = ((ConditionFactorExpression)right).Token.Value;

				int il = 0;
				int rl = 0;
				while (il < leftString.Length && rl < rightString.Length) {
					if (il < leftString.Length - 2 && leftString [il] == '$' && leftString [il + 1] == '(')
						ReadPropertyCondition (properties, leftString, ref il, rightString, ref rl);
					else if (rl < rightString.Length - 2 && rightString [rl] == '$' && rightString [rl + 1] == '(')
						ReadPropertyCondition (properties, rightString, ref rl, leftString, ref il);
					else if (leftString [il] != rightString [rl])
						return; // Condition can't be true
					il++; rl++;
				}
			}
		}