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 | |
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.
-rw-r--r-- | build.proj | 15 | ||||
-rw-r--r-- | lib/DotNetOpenAuth.BuildTasks.dll | bin | 52224 -> 53248 bytes | |||
-rw-r--r-- | lib/DotNetOpenAuth.BuildTasks.pdb | bin | 128512 -> 130560 bytes | |||
-rw-r--r-- | lib/DotNetOpenAuth.BuildTasks.targets | 1 | ||||
-rw-r--r-- | src/DotNetOpenAuth.BuildTasks/AddProjectItems.cs | 62 | ||||
-rw-r--r-- | src/DotNetOpenAuth.BuildTasks/ChangeProjectReferenceToAssemblyReference.cs | 2 | ||||
-rw-r--r-- | src/DotNetOpenAuth.BuildTasks/DotNetOpenAuth.BuildTasks.csproj | 1 | ||||
-rw-r--r-- | src/DotNetOpenAuth.BuildTasks/FixupReferenceHintPaths.cs | 4 | ||||
-rw-r--r-- | src/DotNetOpenAuth.BuildTasks/MergeProjectWithVSTemplate.cs | 7 |
9 files changed, 83 insertions, 9 deletions
@@ -188,15 +188,13 @@ <!-- ... and log4net --> <ProjectTemplateLibraries Include="$(ProjectRoot)\lib\log4net.dll" /> <ProjectTemplateLibraries Include="$(ProjectRoot)\lib\log4net.xml" /> + <ProjectTemplateLibrariesTargets Include="@(ProjectTemplateLibraries->'$(ProjectTemplatesLayoutPath)RelyingPartyLogic\lib\%(FileName)%(Extension)')" /> <ProjectTemplatesSource Include="@(ProjectTemplateLibraries)" /> - <ProjectTemplatesLayout Include="@(ProjectTemplateLibraries->'$(ProjectTemplatesLayoutPath)lib\%(FileName)%(Extension)')" /> - <FixupReferenceAssemblies Include="$(ProjectTemplatesLayoutPath)lib\*.dll" /> + <ProjectTemplatesLayout Include="@(ProjectTemplateLibrariesTargets)" /> + <FixupReferenceAssemblies Include="@(ProjectTemplateLibrariesTargets)" Condition="'%(Extension)' == '.dll'" /> - <!-- force the hint paths to resolve to a path within the project, as required by .vstemplate --> - <FixupReferenceAssemblies> - <HintPath>lib\%(FileName)%(Extension)</HintPath> - </FixupReferenceAssemblies> + <InjectedLibraryItems Include="@(ProjectTemplateLibrariesTargets->'lib\%(FileName)%(Extension)')" /> </ItemGroup> <Trim Inputs="@(_ProjectTemplatesTransformSource)" MetadataName="BeforeTokens" AllAfter="\"> <Output TaskParameter="Outputs" ItemName="ProjectTemplatesTransformSource" /> @@ -217,6 +215,11 @@ Condition="'%(CopiedProjectTemplateFiles.Extension)' == '.csproj'" References="@(FixupReferenceAssemblies)" /> + <AddProjectItems + Projects="@(CopiedProjectTemplateFiles)" + Condition="'%(CopiedProjectTemplateFiles.FileName)%(CopiedProjectTemplateFiles.Extension)' == 'RelyingPartyLogic.csproj'" + Items="@(InjectedLibraryItems)" + /> <MergeProjectWithVSTemplate ProjectItemTypes="@(VsTemplateProjectItemTypes)" ReplaceParametersExtensions="@(VsTemplateParameterReplaceExtensions)" diff --git a/lib/DotNetOpenAuth.BuildTasks.dll b/lib/DotNetOpenAuth.BuildTasks.dll Binary files differindex 18ef46e..0c4e4a9 100644 --- a/lib/DotNetOpenAuth.BuildTasks.dll +++ b/lib/DotNetOpenAuth.BuildTasks.dll diff --git a/lib/DotNetOpenAuth.BuildTasks.pdb b/lib/DotNetOpenAuth.BuildTasks.pdb Binary files differindex 59600c7..98e94f8 100644 --- a/lib/DotNetOpenAuth.BuildTasks.pdb +++ b/lib/DotNetOpenAuth.BuildTasks.pdb diff --git a/lib/DotNetOpenAuth.BuildTasks.targets b/lib/DotNetOpenAuth.BuildTasks.targets index fada100..e376877 100644 --- a/lib/DotNetOpenAuth.BuildTasks.targets +++ b/lib/DotNetOpenAuth.BuildTasks.targets @@ -24,5 +24,6 @@ <UsingTask AssemblyFile="$(ProjectRoot)\lib\DotNetOpenAuth.BuildTasks.dll" TaskName="MergeProjectWithVSTemplate" /> <UsingTask AssemblyFile="$(ProjectRoot)\lib\DotNetOpenAuth.BuildTasks.dll" TaskName="DiscoverProjectTemplates" /> <UsingTask AssemblyFile="$(ProjectRoot)\lib\DotNetOpenAuth.BuildTasks.dll" TaskName="FixupReferenceHintPaths" /> + <UsingTask AssemblyFile="$(ProjectRoot)\lib\DotNetOpenAuth.BuildTasks.dll" TaskName="AddProjectItems" /> </Project> 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); } } |