diff options
author | Andrew Arnott <andrewarnott@gmail.com> | 2010-02-13 12:44:06 -0800 |
---|---|---|
committer | Andrew Arnott <andrewarnott@gmail.com> | 2010-02-13 12:44:06 -0800 |
commit | be0a1f2f8ce56751c38c5d5c8a3010d5289f6d3f (patch) | |
tree | 5cea8bc09203c83515b3828576e3f5b4c0e0f504 /src/DotNetOpenAuth.BuildTasks/ChangeProjectReferenceToAssemblyReference.cs | |
parent | 6b1f72efa44b0d34c584a6551d07ab2160305aff (diff) | |
download | DotNetOpenAuth-be0a1f2f8ce56751c38c5d5c8a3010d5289f6d3f.zip DotNetOpenAuth-be0a1f2f8ce56751c38c5d5c8a3010d5289f6d3f.tar.gz DotNetOpenAuth-be0a1f2f8ce56751c38c5d5c8a3010d5289f6d3f.tar.bz2 |
The dbproj project reference is now removed.
Finished project template creation for VS2010 .zip files.
Diffstat (limited to 'src/DotNetOpenAuth.BuildTasks/ChangeProjectReferenceToAssemblyReference.cs')
-rw-r--r-- | src/DotNetOpenAuth.BuildTasks/ChangeProjectReferenceToAssemblyReference.cs | 56 |
1 files changed, 34 insertions, 22 deletions
diff --git a/src/DotNetOpenAuth.BuildTasks/ChangeProjectReferenceToAssemblyReference.cs b/src/DotNetOpenAuth.BuildTasks/ChangeProjectReferenceToAssemblyReference.cs index f940a72..503e168 100644 --- a/src/DotNetOpenAuth.BuildTasks/ChangeProjectReferenceToAssemblyReference.cs +++ b/src/DotNetOpenAuth.BuildTasks/ChangeProjectReferenceToAssemblyReference.cs @@ -1,47 +1,59 @@ -using System; -using System.Linq; -using System.IO; -using System.Xml; +namespace DotNetOpenAuth.BuildTasks { + using System; + using System.IO; + using System.Linq; + using System.Xml; + using Microsoft.Build.BuildEngine; + using Microsoft.Build.Framework; + using Microsoft.Build.Utilities; -using Microsoft.Build.Framework; -using Microsoft.Build.Utilities; -using Microsoft.Build.BuildEngine; - -namespace DotNetOpenAuth.BuildTasks { /// <summary> /// Replaces ProjectReference items in a set of projects with Reference items. /// </summary> public class ChangeProjectReferenceToAssemblyReference : Task { + private const string msbuildNamespace = "http://schemas.microsoft.com/developer/msbuild/2003"; + /// <summary> /// The projects to alter. /// </summary> [Required] public ITaskItem[] Projects { get; set; } + /// <summary> - /// The project reference to remove. + /// The project references to remove. /// </summary> [Required] - public string ProjectReference { get; set; } + public ITaskItem[] ProjectReferences { get; set; } + /// <summary> - /// The assembly reference to add. + /// The assembly references to add. /// </summary> [Required] - public string Reference { get; set; } + public ITaskItem[] References { 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); + if (this.ProjectReferences.Length != this.References.Length) { + this.Log.LogError("ProjectReferences and References arrays do not have matching lengths."); + } + foreach (var project in Projects) { Project doc = new Project(); doc.Load(project.ItemSpec); - - var projectReference = doc.EvaluatedItems.OfType<BuildItem>().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); + var projectReferences = doc.EvaluatedItems.OfType<BuildItem>().Where(item => item.Name == "ProjectReference"); + var matchingReferences = from reference in projectReferences + join refToRemove in this.ProjectReferences on reference.Include equals refToRemove.ItemSpec + let addIndex = Array.IndexOf(this.ProjectReferences, refToRemove) + select new { Remove = reference, Add = this.References[addIndex] }; + foreach (var matchingReference in matchingReferences) { + this.Log.LogMessage("Removing project reference to \"{0}\" from \"{1}\".", matchingReference.Remove.Include, project.ItemSpec); + doc.RemoveItem(matchingReference.Remove); + if (matchingReference.Add.ItemSpec != "REMOVE") { + this.Log.LogMessage("Adding assembly reference to \"{0}\" to \"{1}\".", matchingReference.Add.ItemSpec, project.ItemSpec); + var newReference = doc.AddNewItem("Reference", Path.GetFileNameWithoutExtension(matchingReference.Add.ItemSpec), true); + newReference.SetMetadata("HintPath", matchingReference.Add.ItemSpec); + } + } doc.Save(project.ItemSpec); } |