public Task EvaluateAsync() { mainProjectInstance = new MSBuildProjectInstance(this); return(mainProjectInstance.EvaluateAsync().ContinueWith(t => { conditionedProperties = mainProjectInstance.GetConditionedProperties(); })); }
public void Evaluate() { if (mainProjectInstance != null) { mainProjectInstance.Dispose(); } mainProjectInstance = new MSBuildProjectInstance(this); mainProjectInstance.Evaluate(); conditionedProperties = mainProjectInstance.GetConditionedProperties(); }
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(); } } }
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); } }
public void Evaluate () { if (mainProjectInstance != null) mainProjectInstance.Dispose (); mainProjectInstance = new MSBuildProjectInstance (this); mainProjectInstance.Evaluate (); conditionedProperties = mainProjectInstance.GetConditionedProperties (); }
public Task EvaluateAsync () { if (mainProjectInstance != null) mainProjectInstance.Dispose (); mainProjectInstance = new MSBuildProjectInstance (this); return mainProjectInstance.EvaluateAsync ().ContinueWith (t => { conditionedProperties = mainProjectInstance.GetConditionedProperties (); }); }
public void Evaluate () { mainProjectInstance = new MSBuildProjectInstance (this); mainProjectInstance.Evaluate (); conditionedProperties = mainProjectInstance.GetConditionedProperties (); }
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); }
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++; } } }