61 строка
1.3 KiB
C#
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;
|
|
}
|
|
}
|
|
} |