diff options
author | Andrew Arnott <andrewarnott@gmail.com> | 2009-11-15 15:27:22 -0800 |
---|---|---|
committer | Andrew Arnott <andrewarnott@gmail.com> | 2009-11-15 15:27:22 -0800 |
commit | 2ff3e125a7db35ce459b89add580aedf7d2bd7d4 (patch) | |
tree | 965802693892616db01cf6997f060dda44518697 /src/DotNetOpenAuth.BuildTasks | |
parent | 06a07e1f08fbf8f9307a591da637fcb30edd9c45 (diff) | |
download | DotNetOpenAuth-2ff3e125a7db35ce459b89add580aedf7d2bd7d4.zip DotNetOpenAuth-2ff3e125a7db35ce459b89add580aedf7d2bd7d4.tar.gz DotNetOpenAuth-2ff3e125a7db35ce459b89add580aedf7d2bd7d4.tar.bz2 |
The built project template (once again) generates a .zip file that works out of the box.
The build.proj contains some magic strings we'd rather not have, but we can resolve those later.
Diffstat (limited to 'src/DotNetOpenAuth.BuildTasks')
5 files changed, 73 insertions, 3 deletions
diff --git a/src/DotNetOpenAuth.BuildTasks/AddProjectItems.cs b/src/DotNetOpenAuth.BuildTasks/AddProjectItems.cs new file mode 100644 index 0000000..30fa284 --- /dev/null +++ b/src/DotNetOpenAuth.BuildTasks/AddProjectItems.cs @@ -0,0 +1,62 @@ +//----------------------------------------------------------------------- +// <copyright file="AddProjectItems.cs" company="Andrew Arnott"> +// Copyright (c) Andrew Arnott. All rights reserved. +// </copyright> +//----------------------------------------------------------------------- + +namespace DotNetOpenAuth.BuildTasks { + using System; + using System.Collections.Generic; + using System.Linq; + using System.Text; + using Microsoft.Build.BuildEngine; + using Microsoft.Build.Framework; + using Microsoft.Build.Utilities; + using System.Collections; + + public class AddProjectItems : Task { + /// <summary> + /// Gets or sets the projects to add items to. + /// </summary> + /// <value>The projects.</value> + [Required] + public ITaskItem[] Projects { get; set; } + + /// <summary> + /// Gets or sets the items to add to each project. + /// </summary> + /// <value>The items.</value> + /// <remarks> + /// Use the metadata "ItemType" on each item to specify the item type to use for the new + /// project item. If the metadata is absent, "None" is used as the item type. + /// </remarks> + [Required] + public ITaskItem[] Items { get; set; } + + /// <summary> + /// Executes this instance. + /// </summary> + public override bool Execute() { + foreach (var projectTaskItem in this.Projects) { + var project = new Project(); + project.Load(projectTaskItem.ItemSpec); + + foreach (var projectItem in this.Items) { + string itemType = projectItem.GetMetadata("ItemType"); + if (string.IsNullOrEmpty(itemType)) { + itemType = "None"; + } + BuildItem newItem = project.AddNewItem(itemType, projectItem.ItemSpec, false); + var customMetadata = projectItem.CloneCustomMetadata(); + foreach (DictionaryEntry entry in customMetadata) { + newItem.SetMetadata((string)entry.Key, (string)entry.Value); + } + } + + project.Save(projectTaskItem.ItemSpec); + } + + return !this.Log.HasLoggedErrors; + } + } +} diff --git a/src/DotNetOpenAuth.BuildTasks/ChangeProjectReferenceToAssemblyReference.cs b/src/DotNetOpenAuth.BuildTasks/ChangeProjectReferenceToAssemblyReference.cs index 973d8d6..f940a72 100644 --- a/src/DotNetOpenAuth.BuildTasks/ChangeProjectReferenceToAssemblyReference.cs +++ b/src/DotNetOpenAuth.BuildTasks/ChangeProjectReferenceToAssemblyReference.cs @@ -40,7 +40,7 @@ namespace DotNetOpenAuth.BuildTasks { item => item.Name == "ProjectReference" && item.Include == ProjectReference).Single(); doc.RemoveItem(projectReference); - var newReference = doc.AddNewItem("Reference", Path.GetFileNameWithoutExtension(Reference)); + var newReference = doc.AddNewItem("Reference", Path.GetFileNameWithoutExtension(Reference), true); newReference.SetMetadata("HintPath", Reference); doc.Save(project.ItemSpec); diff --git a/src/DotNetOpenAuth.BuildTasks/DotNetOpenAuth.BuildTasks.csproj b/src/DotNetOpenAuth.BuildTasks/DotNetOpenAuth.BuildTasks.csproj index 8670601..7f84787 100644 --- a/src/DotNetOpenAuth.BuildTasks/DotNetOpenAuth.BuildTasks.csproj +++ b/src/DotNetOpenAuth.BuildTasks/DotNetOpenAuth.BuildTasks.csproj @@ -79,6 +79,7 @@ </Reference> </ItemGroup> <ItemGroup> + <Compile Include="AddProjectItems.cs" /> <Compile Include="ChangeProjectReferenceToAssemblyReference.cs" /> <Compile Include="CompareFiles.cs" /> <Compile Include="ChangeAssemblyReference.cs" /> diff --git a/src/DotNetOpenAuth.BuildTasks/FixupReferenceHintPaths.cs b/src/DotNetOpenAuth.BuildTasks/FixupReferenceHintPaths.cs index c8b039a..13a4b8f 100644 --- a/src/DotNetOpenAuth.BuildTasks/FixupReferenceHintPaths.cs +++ b/src/DotNetOpenAuth.BuildTasks/FixupReferenceHintPaths.cs @@ -19,18 +19,20 @@ namespace DotNetOpenAuth.BuildTasks { /// <summary> /// Gets or sets the projects to fixup references for. /// </summary> + [Required] public ITaskItem[] Projects { get; set; } /// <summary> /// Gets or sets the set of full paths to assemblies that may be found in any of the <see cref="Projects"/>. /// </summary> + [Required] public ITaskItem[] References { get; set; } /// <summary> /// Executes this instance. /// </summary> public override bool Execute() { - if (this.References == null || this.Projects == null || this.References.Length == 0 || this.Projects.Length == 0) { + if (this.References.Length == 0 || this.Projects.Length == 0) { this.Log.LogMessage(MessageImportance.Low, "Skipping reference hintpath fixup because no projects or no references were supplied."); return !this.Log.HasLoggedErrors; } diff --git a/src/DotNetOpenAuth.BuildTasks/MergeProjectWithVSTemplate.cs b/src/DotNetOpenAuth.BuildTasks/MergeProjectWithVSTemplate.cs index 3fbdf45..a2fd46b 100644 --- a/src/DotNetOpenAuth.BuildTasks/MergeProjectWithVSTemplate.cs +++ b/src/DotNetOpenAuth.BuildTasks/MergeProjectWithVSTemplate.cs @@ -19,10 +19,13 @@ namespace DotNetOpenAuth.BuildTasks { public class MergeProjectWithVSTemplate : Task { internal const string VSTemplateNamespace = "http://schemas.microsoft.com/developer/vstemplate/2005"; + [Required] public string[] ProjectItemTypes { get; set; } + [Required] public string[] ReplaceParametersExtensions { get; set; } + [Required] public ITaskItem[] Templates { get; set; } /// <summary> @@ -56,8 +59,10 @@ namespace DotNetOpenAuth.BuildTasks { bool replaceParameters = this.ReplaceParametersExtensions.Contains(Path.GetExtension(item.Include)); var projectItem = new XElement( XName.Get("ProjectItem", VSTemplateNamespace), - new XAttribute("ReplaceParameters", replaceParameters ? "true" : "false"), Path.GetFileName(item.Include)); + if (replaceParameters) { + projectItem.SetAttributeValue("ReplaceParameters", "true"); + } parentNode.Add(projectItem); } } |