using System; using System.Linq; using System.IO; using System.Xml; using Microsoft.Build.Framework; using Microsoft.Build.Utilities; using Microsoft.Build.BuildEngine; namespace DotNetOpenAuth.BuildTasks { /// /// Replaces ProjectReference items in a set of projects with Reference items. /// public class ChangeProjectReferenceToAssemblyReference : Task { /// /// The projects to alter. /// [Required] public ITaskItem[] Projects { get; set; } /// /// The project reference to remove. /// [Required] public string ProjectReference { get; set; } /// /// The assembly reference to add. /// [Required] public string Reference { get; set; } const string msbuildNamespace = "http://schemas.microsoft.com/developer/msbuild/2003"; public override bool Execute() { foreach (var project in Projects) { Log.LogMessage(MessageImportance.Normal, "Changing P2P references to assembly references in \"{0}\".", project.ItemSpec); Project doc = new Project(); doc.Load(project.ItemSpec); var projectReference = doc.EvaluatedItems.OfType().Where( item => item.Name == "ProjectReference" && item.Include == ProjectReference).Single(); doc.RemoveItem(projectReference); var newReference = doc.AddNewItem("Reference", Path.GetFileNameWithoutExtension(Reference), true); newReference.SetMetadata("HintPath", Reference); doc.Save(project.ItemSpec); } return true; } } }