private void ProcessMetadataElements(ProjectItemElement itemElement, OperationBuilderWithMetadata operationBuilder) { if (itemElement.HasMetadata) { operationBuilder.Metadata.AddRange(itemElement.Metadata); List <string> values = new List <string>(itemElement.Metadata.Count * 2); foreach (ProjectMetadataElement metadatumElement in itemElement.Metadata) { values.Add(metadatumElement.Value); values.Add(metadatumElement.Condition); } ItemsAndMetadataPair itemsAndMetadataFound = ExpressionShredder.GetReferencedItemNamesAndMetadata(values); if (itemsAndMetadataFound.Items != null) { foreach (var itemType in itemsAndMetadataFound.Items) { var itemList = GetItemList(itemType); if (itemList != null) { operationBuilder.ReferencedItemLists[itemType] = itemList; } } } } }
private UpdateOperation BuildUpdateOperation(string rootDirectory, ProjectItemElement itemElement, bool conditionResult) { OperationBuilderWithMetadata operationBuilder = new OperationBuilderWithMetadata(itemElement, conditionResult); // Proces Update attribute ProcessItemSpec(rootDirectory, itemElement.Update, itemElement.UpdateLocation, operationBuilder); ProcessMetadataElements(itemElement, operationBuilder); return(new UpdateOperation(operationBuilder, this)); }
private void ProcessMetadataElements(ProjectItemElement itemElement, OperationBuilderWithMetadata operationBuilder) { if (itemElement.HasMetadata) { operationBuilder.Metadata.AddRange(itemElement.Metadata); var itemsAndMetadataFound = ExpressionShredder.GetReferencedItemNamesAndMetadata(GetExpandedMetadataValuesAndConditions(itemElement.Metadata, _expander)); if (itemsAndMetadataFound.Items != null) { foreach (var itemType in itemsAndMetadataFound.Items) { AddReferencedItemList(itemType, operationBuilder.ReferencedItemLists); } } } }
private void ProcessMetadataElements(ProjectItemElement itemElement, OperationBuilderWithMetadata operationBuilder) { if (itemElement.HasMetadata) { var values = new List <string>(itemElement.Metadata.Count * 2); // Expand properties here, because a property may have a value which is an item reference (ie "@(Bar)"), and // if so we need to add the right item reference. foreach (var metadatumElement in itemElement.Metadata) { var valueWithPropertiesExpanded = _expander.ExpandIntoStringLeaveEscaped( metadatumElement.Value, ExpanderOptions.ExpandProperties, metadatumElement.Location); var conditionWithPropertiesExpanded = _expander.ExpandIntoStringLeaveEscaped( metadatumElement.Condition, ExpanderOptions.ExpandProperties, metadatumElement.ConditionLocation); operationBuilder.Metadata.Add( new PartiallyEvaluatedMetadata { ValueWithPropertiesExpanded = valueWithPropertiesExpanded, ConditionWithPropertiesExpanded = conditionWithPropertiesExpanded, Element = metadatumElement }); values.Add(valueWithPropertiesExpanded); values.Add(conditionWithPropertiesExpanded); } var itemsAndMetadataFound = ExpressionShredder.GetReferencedItemNamesAndMetadata(values); if (itemsAndMetadataFound.Items != null) { foreach (var itemType in itemsAndMetadataFound.Items) { AddReferencedItemList(itemType, operationBuilder.ReferencedItemLists); } } } }
private void ProcessMetadataElements(ProjectItemElement itemElement, OperationBuilderWithMetadata operationBuilder) { if (itemElement.HasMetadata) { operationBuilder.Metadata.AddRange(itemElement.Metadata); var values = new List <string>(itemElement.Metadata.Count * 2); // Expand properties here, because a property may have a value which is an item reference (ie "@(Bar)"), and // if so we need to add the right item reference. foreach (var metadatumElement in itemElement.Metadata) { // Since we're just attempting to expand properties in order to find referenced items and not expanding metadata, // unexpected errors may occur when evaluating property functions on unexpanded metadata. Just ignore them if that happens. // See: https://github.com/Microsoft/msbuild/issues/3460 const ExpanderOptions expanderOptions = ExpanderOptions.ExpandProperties | ExpanderOptions.LeavePropertiesUnexpandedOnError; var valueWithPropertiesExpanded = _expander.ExpandIntoStringLeaveEscaped( metadatumElement.Value, expanderOptions, metadatumElement.Location); var conditionWithPropertiesExpanded = _expander.ExpandIntoStringLeaveEscaped( metadatumElement.Condition, expanderOptions, metadatumElement.ConditionLocation); values.Add(valueWithPropertiesExpanded); values.Add(conditionWithPropertiesExpanded); } var itemsAndMetadataFound = ExpressionShredder.GetReferencedItemNamesAndMetadata(values); if (itemsAndMetadataFound.Items != null) { foreach (var itemType in itemsAndMetadataFound.Items) { AddReferencedItemList(itemType, operationBuilder.ReferencedItemLists); } } } }
public UpdateOperation(OperationBuilderWithMetadata builder, LazyItemEvaluator <P, I, M, D> lazyEvaluator) : base(builder, lazyEvaluator) { _metadata = builder.Metadata.ToImmutable(); }