File: CombineLinkerXmlFiles.cs
Web Access
Project: src\src\tools\illink\src\ILLink.Tasks\ILLink.Tasks.csproj (ILLink.Tasks)
// 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;
		}
	}
}