summaryrefslogtreecommitdiffstats
path: root/src/DotNetOpenAuth.BuildTasks/ChangeProjectReferenceToAssemblyReference.cs
diff options
context:
space:
mode:
authorAndrew Arnott <andrewarnott@gmail.com>2010-02-13 12:44:06 -0800
committerAndrew Arnott <andrewarnott@gmail.com>2010-02-13 12:44:06 -0800
commitbe0a1f2f8ce56751c38c5d5c8a3010d5289f6d3f (patch)
tree5cea8bc09203c83515b3828576e3f5b4c0e0f504 /src/DotNetOpenAuth.BuildTasks/ChangeProjectReferenceToAssemblyReference.cs
parent6b1f72efa44b0d34c584a6551d07ab2160305aff (diff)
downloadDotNetOpenAuth-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.cs56
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);
}