summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--build.proj8
-rw-r--r--lib/DotNetOpenAuth.BuildTasks.dllbin50176 -> 51712 bytes
-rw-r--r--lib/DotNetOpenAuth.BuildTasks.pdbbin122368 -> 128512 bytes
-rw-r--r--lib/DotNetOpenAuth.BuildTasks.targets1
-rw-r--r--src/DotNetOpenAuth.BuildTasks/DotNetOpenAuth.BuildTasks.csproj1
-rw-r--r--src/DotNetOpenAuth.BuildTasks/FixupReferenceHintPaths.cs60
-rw-r--r--src/DotNetOpenAuth.BuildTasks/MergeProjectWithVSTemplate.cs2
7 files changed, 70 insertions, 2 deletions
diff --git a/build.proj b/build.proj
index a04daeb..162d267 100644
--- a/build.proj
+++ b/build.proj
@@ -191,6 +191,7 @@
<ProjectTemplatesSource Include="@(ProjectTemplateLibraries)" />
<ProjectTemplatesLayout Include="@(ProjectTemplateLibraries->'$(ProjectTemplatesLayoutPath)lib\%(FileName)%(Extension)')" />
+ <FixupReferenceAssemblies Include="$(ProjectTemplatesLayoutPath)lib\*.dll" />
</ItemGroup>
<Trim Inputs="@(_ProjectTemplatesTransformSource)" MetadataName="BeforeTokens" AllAfter="\">
<Output TaskParameter="Outputs" ItemName="ProjectTemplatesTransformSource" />
@@ -205,7 +206,12 @@
Projects="@(CopiedProjectTemplateFiles)"
Condition="'%(Extension)' == '.csproj'"
ProjectReference="..\..\src\$(ProductName)\$(ProductName).csproj"
- Reference="Bin\$(ProductName).dll" />
+ Reference="Lib\$(ProductName).dll" />
+ <FixupReferenceHintPaths
+ Projects="@(CopiedProjectTemplateFiles)"
+ Condition="'%(CopiedProjectTemplateFiles.Extension)' == '.csproj'"
+ References="@(FixupReferenceAssemblies)"
+ />
<MergeProjectWithVSTemplate
ProjectItemTypes="@(VsTemplateProjectItemTypes)"
ReplaceParametersExtensions="@(VsTemplateParameterReplaceExtensions)"
diff --git a/lib/DotNetOpenAuth.BuildTasks.dll b/lib/DotNetOpenAuth.BuildTasks.dll
index b2aa255..b5a0abf 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 34c368d..30e6562 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 3ad679f..fada100 100644
--- a/lib/DotNetOpenAuth.BuildTasks.targets
+++ b/lib/DotNetOpenAuth.BuildTasks.targets
@@ -23,5 +23,6 @@
<UsingTask AssemblyFile="$(ProjectRoot)\lib\DotNetOpenAuth.BuildTasks.dll" TaskName="CopyWithTokenSubstitution" />
<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" />
</Project>
diff --git a/src/DotNetOpenAuth.BuildTasks/DotNetOpenAuth.BuildTasks.csproj b/src/DotNetOpenAuth.BuildTasks/DotNetOpenAuth.BuildTasks.csproj
index 068af4b..8670601 100644
--- a/src/DotNetOpenAuth.BuildTasks/DotNetOpenAuth.BuildTasks.csproj
+++ b/src/DotNetOpenAuth.BuildTasks/DotNetOpenAuth.BuildTasks.csproj
@@ -88,6 +88,7 @@
<Compile Include="DiscoverProjectTemplates.cs" />
<Compile Include="ECMAScriptPacker.cs" />
<Compile Include="FilterItems.cs" />
+ <Compile Include="FixupReferenceHintPaths.cs" />
<Compile Include="MergeProjectWithVSTemplate.cs" />
<Compile Include="GetBuildVersion.cs" />
<Compile Include="CheckAdminRights.cs" />
diff --git a/src/DotNetOpenAuth.BuildTasks/FixupReferenceHintPaths.cs b/src/DotNetOpenAuth.BuildTasks/FixupReferenceHintPaths.cs
new file mode 100644
index 0000000..4e006a8
--- /dev/null
+++ b/src/DotNetOpenAuth.BuildTasks/FixupReferenceHintPaths.cs
@@ -0,0 +1,60 @@
+//-----------------------------------------------------------------------
+// <copyright file="FixupReferenceHintPaths.cs" company="Andrew Arnott">
+// Copyright (c) Andrew Arnott. All rights reserved.
+// </copyright>
+//-----------------------------------------------------------------------
+
+namespace DotNetOpenAuth.BuildTasks {
+ using System;
+ using System.Collections.Generic;
+ using System.IO;
+ using System.Linq;
+ using System.Reflection;
+ using System.Text;
+ using Microsoft.Build.BuildEngine;
+ using Microsoft.Build.Framework;
+ using Microsoft.Build.Utilities;
+
+ public class FixupReferenceHintPaths : Task {
+ /// <summary>
+ /// Gets or sets the projects to fixup references for.
+ /// </summary>
+ 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>
+ public ITaskItem[] References { get; set; }
+
+ /// <summary>
+ /// Executes this instance.
+ /// </summary>
+ public override bool Execute() {
+ // Figure out what the assembly names are of the references that are available.
+ AssemblyName[] availableReferences = new AssemblyName[this.References.Length];
+ for (int i = 0; i < this.References.Length; i++) {
+ availableReferences[i] = AssemblyName.GetAssemblyName(this.References[i].ItemSpec);
+ }
+
+ foreach (var projectTaskItem in this.Projects) {
+ var project = new Project();
+ Uri projectUri = new Uri(projectTaskItem.GetMetadata("FullPath"));
+ project.Load(projectTaskItem.ItemSpec);
+
+ foreach (BuildItem referenceItem in project.GetEvaluatedItemsByName("Reference")) {
+ var referenceAssemblyName = new AssemblyName(referenceItem.Include);
+ var matchingReference = availableReferences.FirstOrDefault(r => string.Equals(r.Name, referenceAssemblyName.Name, StringComparison.OrdinalIgnoreCase));
+ if (matchingReference != null) {
+ string hintPath = projectUri.MakeRelativeUri(new Uri(matchingReference.CodeBase)).OriginalString.Replace(Path.AltDirectorySeparatorChar, Path.DirectorySeparatorChar);
+ this.Log.LogMessage("Fixing up HintPath to \"{0}\" in project \"{1}\".", referenceAssemblyName.Name, projectTaskItem.ItemSpec);
+ referenceItem.SetMetadata("HintPath", hintPath);
+ }
+ }
+
+ project.Save(projectTaskItem.ItemSpec);
+ }
+
+ return !this.Log.HasLoggedErrors;
+ }
+ }
+}
diff --git a/src/DotNetOpenAuth.BuildTasks/MergeProjectWithVSTemplate.cs b/src/DotNetOpenAuth.BuildTasks/MergeProjectWithVSTemplate.cs
index cbdb849..3fbdf45 100644
--- a/src/DotNetOpenAuth.BuildTasks/MergeProjectWithVSTemplate.cs
+++ b/src/DotNetOpenAuth.BuildTasks/MergeProjectWithVSTemplate.cs
@@ -40,7 +40,7 @@ namespace DotNetOpenAuth.BuildTasks {
var projectPath = Path.Combine(Path.GetDirectoryName(sourceTemplateTaskItem.ItemSpec), projectElement.Attribute("File").Value);
Log.LogMessage("Merging project \"{0}\" with \"{1}\".", projectPath, sourceTemplateTaskItem.ItemSpec);
- var sourceProject = new Microsoft.Build.BuildEngine.Project();
+ var sourceProject = new Project();
sourceProject.Load(projectPath);
// Collect the project items from the project that are appropriate