xamarin-macios/msbuild/Xamarin.MacDev.Tasks.Core/Tasks/ReadItemsFromFileBase.cs

61 строка
1.3 KiB
C#

using System;
using System.IO;
using System.Collections.Generic;
using System.Linq;
using Microsoft.Build.Framework;
using Microsoft.Build.Utilities;
using Microsoft.Build.Tasks;
using System.Xml.Linq;
namespace Xamarin.MacDev.Tasks
{
public abstract class ReadItemsFromFileBase : Task
{
static readonly XNamespace XmlNs = XNamespace.Get("http://schemas.microsoft.com/developer/msbuild/2003");
static readonly XName ItemGroupElementName = XmlNs + "ItemGroup";
const string IncludeAttributeName = "Include";
#region Inputs
public string SessionId { get; set; }
[Output]
[Required]
public ITaskItem File { get; set; }
#endregion
#region Outputs
[Output]
public ITaskItem[] Items { get; set; }
#endregion
public override bool Execute ()
{
var document = XDocument.Load (this.File.ItemSpec);
this.Items = document.Root
.Elements (ItemGroupElementName)
.SelectMany (element => element.Elements ())
.Select (element => this.CreateItemFromElement (element))
.ToArray ();
return true;
}
private ITaskItem CreateItemFromElement (XElement element)
{
var item = new TaskItem (element.Attribute (IncludeAttributeName).Value);
foreach (var metadata in element.Elements ()) {
item.SetMetadata (metadata.Name.LocalName, metadata.Value);
}
return item;
}
}
}