public override bool Execute() { StringBuilder builder = new StringBuilder(); // we always generate global configs builder.AppendLine("is_global = true"); // collect the properties into a global section foreach (var prop in PropertyItems) { builder .Append("build_property.") .Append(prop.ItemSpec) .Append(" = ") .AppendLine(prop.GetMetadata("Value")); } // group the metadata items by their full path var groupedItems = MetadataItems.GroupBy( i => NormalizeWithForwardSlash(i.GetMetadata("FullPath")) ); foreach (var group in groupedItems) { // write the section for this item builder.AppendLine().Append("["); EncodeString(builder, group.Key); builder.AppendLine("]"); foreach (var item in group) { string itemType = item.GetMetadata("ItemType"); string metadataName = item.GetMetadata("MetadataName"); if ( !string.IsNullOrWhiteSpace(itemType) && !string.IsNullOrWhiteSpace(metadataName) ) { builder .Append("build_metadata.") .Append(itemType) .Append(".") .Append(metadataName) .Append(" = ") .AppendLine(item.GetMetadata(metadataName)); } } } ConfigFileContents = builder.ToString(); return(true); }