diff --git a/src/Build/BackEnd/TaskExecutionHost/TaskExecutionHost.cs b/src/Build/BackEnd/TaskExecutionHost/TaskExecutionHost.cs index 705ca12979e..b2eee81b3f7 100644 --- a/src/Build/BackEnd/TaskExecutionHost/TaskExecutionHost.cs +++ b/src/Build/BackEnd/TaskExecutionHost/TaskExecutionHost.cs @@ -1395,9 +1395,15 @@ private void GatherTaskItemOutputs(bool outputTargetIsItem, string outputTargetN // Setting an item spec expects the escaped value, as does setting metadata. newItem = new ProjectItemInstance(_projectInstance, outputTargetName, EscapingUtilities.Escape(output.ItemSpec), parameterLocationEscaped); - newItem.SetMetadataOnTaskOutput(output.CloneCustomMetadata() - .Cast() - .Select(x => new KeyValuePair((string)x.Key, EscapingUtilities.Escape((string)x.Value)))); + newItem.SetMetadataOnTaskOutput(EnumerateMetadata(output.CloneCustomMetadata())); + + static IEnumerable> EnumerateMetadata(IDictionary customMetadata) + { + foreach (DictionaryEntry de in customMetadata) + { + yield return new KeyValuePair((string)de.Key, EscapingUtilities.Escape((string)de.Value)); + } + } } }