|
// Copyright (c) .NET Foundation and contributors. All rights reserved.
// Licensed under the MIT license. See LICENSE file in the project root for full license information.
using System.Xml;
using System.Xml.Linq;
using Microsoft.Build.Framework;
using Microsoft.Build.Utilities;
namespace ILLink.Tasks
{
/// <summary>
/// Combines multiple ILLink xml files into a single xml file.
/// </summary>
public class CombineLinkerXmlFiles : Task
{
/// <summary>
/// The individual ILLink xml files that will be combined into one.
/// </summary>
[Required]
public ITaskItem[] LinkerXmlFiles { get; set; }
/// <summary>
/// The path to the file to generate.
/// </summary>
[Required]
public string CombinedLinkerXmlFile { get; set; }
public override bool Execute ()
{
var combined = new XElement ("linker");
foreach (var linkerXmlFile in LinkerXmlFiles) {
XDocument subFile = XDocument.Load (linkerXmlFile.ItemSpec);
foreach (var element in subFile.Root.Elements ()) {
combined.Add (element);
}
}
var xdoc = new XDocument (combined);
XmlWriterSettings xws = new XmlWriterSettings {
Indent = true,
OmitXmlDeclaration = true
};
using (XmlWriter xw = XmlWriter.Create (CombinedLinkerXmlFile, xws)) {
xdoc.Save (xw);
}
return true;
}
}
}
|