From 2a784ba93ca2ae6c9436e3405288d1b7d8d7b2eb Mon Sep 17 00:00:00 2001 From: Hans van Bakel Date: Fri, 7 Jul 2017 21:17:06 -0700 Subject: [PATCH] Fixes #18 --- Project2015To2017/Definition/Project.cs | 2 +- Project2015To2017/Definition/ProjectReference.cs | 14 ++++++++++++++ .../ProjectReferenceTransformation.cs | 10 +++++++++- Project2015To2017/Writing/ProjectWriter.cs | 10 +++++++++- .../ProjectReferenceTransformationTest.cs | 2 +- .../TestFiles/net46console.testcsproj | 2 ++ 6 files changed, 36 insertions(+), 4 deletions(-) create mode 100644 Project2015To2017/Definition/ProjectReference.cs diff --git a/Project2015To2017/Definition/Project.cs b/Project2015To2017/Definition/Project.cs index b029379..15b4ac7 100644 --- a/Project2015To2017/Definition/Project.cs +++ b/Project2015To2017/Definition/Project.cs @@ -6,7 +6,7 @@ namespace Project2015To2017.Definition internal sealed class Project { public IReadOnlyList AssemblyReferences { get; internal set; } - public IReadOnlyList ProjectReferences { get; internal set; } + public IReadOnlyList ProjectReferences { get; internal set; } public IReadOnlyList PackageReferences { get; internal set; } public IReadOnlyList ItemsToInclude { get; internal set; } public PackageConfiguration PackageConfiguration { get; internal set; } diff --git a/Project2015To2017/Definition/ProjectReference.cs b/Project2015To2017/Definition/ProjectReference.cs new file mode 100644 index 0000000..82b46af --- /dev/null +++ b/Project2015To2017/Definition/ProjectReference.cs @@ -0,0 +1,14 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Project2015To2017.Definition +{ + public class ProjectReference + { + public string Include { get; set; } + public string Aliases { get; set; } + } +} diff --git a/Project2015To2017/ProjectReferenceTransformation.cs b/Project2015To2017/ProjectReferenceTransformation.cs index f7e2717..99245c2 100644 --- a/Project2015To2017/ProjectReferenceTransformation.cs +++ b/Project2015To2017/ProjectReferenceTransformation.cs @@ -14,7 +14,15 @@ public Task TransformAsync(XDocument projectFile, DirectoryInfo projectFolder, P // TODO Project references are now transitive so we might be able to flatten later.. - definition.ProjectReferences = projectFile.Element(nsSys + "Project").Elements(nsSys + "ItemGroup").Elements(nsSys + "ProjectReference").Select(x => x.Attribute("Include").Value).ToArray(); + definition.ProjectReferences = projectFile + .Element(nsSys + "Project") + .Elements(nsSys + "ItemGroup") + .Elements(nsSys + "ProjectReference") + .Select(x => new ProjectReference + { + Include = x.Attribute("Include").Value, + Aliases = x.Element(nsSys + "Aliases")?.Value + }).ToArray(); return Task.CompletedTask; } } diff --git a/Project2015To2017/Writing/ProjectWriter.cs b/Project2015To2017/Writing/ProjectWriter.cs index a84317d..6fa927e 100644 --- a/Project2015To2017/Writing/ProjectWriter.cs +++ b/Project2015To2017/Writing/ProjectWriter.cs @@ -27,7 +27,15 @@ public void Write(Project project, FileInfo outputFile) var itemGroup = new XElement("ItemGroup"); foreach (var projectReference in project.ProjectReferences) { - itemGroup.Add(new XElement("ProjectReference", new XAttribute("Include", projectReference))); + var projectReferenceElement = new XElement("ProjectReference", + new XAttribute("Include", projectReference.Include)); + + if (!string.IsNullOrWhiteSpace(projectReference.Aliases) && projectReference.Aliases != "global") + { + projectReferenceElement.Add(new XElement("Aliases", projectReference.Aliases)); + } + + itemGroup.Add(projectReferenceElement); } projectNode.Add(itemGroup); diff --git a/Project2015To2017Tests/ProjectReferenceTransformationTest.cs b/Project2015To2017Tests/ProjectReferenceTransformationTest.cs index 7c6b38a..b6964d8 100644 --- a/Project2015To2017Tests/ProjectReferenceTransformationTest.cs +++ b/Project2015To2017Tests/ProjectReferenceTransformationTest.cs @@ -23,7 +23,7 @@ public async Task TransformsProjectReferencesAsync() await transformation.TransformAsync(doc, directoryInfo, project).ConfigureAwait(false); Assert.AreEqual(2, project.ProjectReferences.Count); - Assert.IsTrue(project.ProjectReferences.Contains(@"..\SomeOtherProject\SomeOtherProject.csproj")); + Assert.IsTrue(project.ProjectReferences.Any(x => x.Include == @"..\SomeOtherProject\SomeOtherProject.csproj" && x.Aliases == "global,one")); } } } diff --git a/Project2015To2017Tests/TestFiles/net46console.testcsproj b/Project2015To2017Tests/TestFiles/net46console.testcsproj index 4dea782..3f2b772 100644 --- a/Project2015To2017Tests/TestFiles/net46console.testcsproj +++ b/Project2015To2017Tests/TestFiles/net46console.testcsproj @@ -71,10 +71,12 @@ {E5D98CC4-93A3-450D-B33E-F9CAD02BBD8C} SomeOtherProject + global,one {E5D98CC5-93A3-450D-B33E-F9CAD02BBD8C} YetAnotherProject + global