summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAndrew Arnott <andrewarnott@gmail.com>2009-11-15 15:27:22 -0800
committerAndrew Arnott <andrewarnott@gmail.com>2009-11-15 15:27:22 -0800
commit2ff3e125a7db35ce459b89add580aedf7d2bd7d4 (patch)
tree965802693892616db01cf6997f060dda44518697
parent06a07e1f08fbf8f9307a591da637fcb30edd9c45 (diff)
downloadDotNetOpenAuth-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.proj15
-rw-r--r--lib/DotNetOpenAuth.BuildTasks.dllbin52224 -> 53248 bytes
-rw-r--r--lib/DotNetOpenAuth.BuildTasks.pdbbin128512 -> 130560 bytes
-rw-r--r--lib/DotNetOpenAuth.BuildTasks.targets1
-rw-r--r--src/DotNetOpenAuth.BuildTasks/AddProjectItems.cs62
-rw-r--r--src/DotNetOpenAuth.BuildTasks/ChangeProjectReferenceToAssemblyReference.cs2
-rw-r--r--src/DotNetOpenAuth.BuildTasks/DotNetOpenAuth.BuildTasks.csproj1
-rw-r--r--src/DotNetOpenAuth.BuildTasks/FixupReferenceHintPaths.cs4
-rw-r--r--src/DotNetOpenAuth.BuildTasks/MergeProjectWithVSTemplate.cs7
9 files changed, 83 insertions, 9 deletions
diff --git a/build.proj b/build.proj
index 83e69b5..52f1c94 100644
--- a/build.proj
+++ b/build.proj
@@ -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
index 18ef46e..0c4e4a9 100644
--- a/lib/DotNetOpenAuth.BuildTasks.dll
+++ b/lib/DotNetOpenAuth.BuildTasks.dll
Binary files differ
diff --git a/lib/DotNetOpenAuth.BuildTasks.pdb b/lib/DotNetOpenAuth.BuildTasks.pdb
index 59600c7..98e94f8 100644
--- a/lib/DotNetOpenAuth.BuildTasks.pdb
+++ b/lib/DotNetOpenAuth.BuildTasks.pdb
Binary files differ
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);
}
}