Skip to content

Commit

Permalink
Fixes #29
Browse files Browse the repository at this point in the history
  • Loading branch information
hvanbakel committed Nov 18, 2017
1 parent 8d4e05f commit 45af218
Show file tree
Hide file tree
Showing 5 changed files with 142 additions and 74 deletions.
6 changes: 4 additions & 2 deletions Project2015To2017/AssemblyInfoTransformation.cs
Original file line number Diff line number Diff line change
Expand Up @@ -39,8 +39,10 @@ public async Task TransformAsync(XDocument projectFile, DirectoryInfo projectFol
Product = GetAttributeValue<AssemblyProductAttribute>(text),
Copyright = GetAttributeValue<AssemblyCopyrightAttribute>(text),
InformationalVersion = GetAttributeValue<AssemblyInformationalVersionAttribute>(text),
Version = GetAttributeValue<AssemblyVersionAttribute>(text)
};
Version = GetAttributeValue<AssemblyVersionAttribute>(text),
FileVersion = GetAttributeValue<AssemblyFileVersionAttribute>(text),
Configuration = GetAttributeValue<AssemblyConfigurationAttribute>(text)
};
}
else
{
Expand Down
4 changes: 3 additions & 1 deletion Project2015To2017/Definition/AssemblyAttributes.cs
Original file line number Diff line number Diff line change
Expand Up @@ -16,5 +16,7 @@ internal sealed class AssemblyAttributes
public string Version { get; set; }
public string AssemblyName { get; set; }
public string Description { get; set; }
}
public string Configuration { get; internal set; }
public string FileVersion { get; internal set; }
}
}
154 changes: 89 additions & 65 deletions Project2015To2017/Writing/ProjectWriter.cs
Original file line number Diff line number Diff line change
Expand Up @@ -11,21 +11,32 @@ namespace Project2015To2017.Writing
internal sealed class ProjectWriter
{
public void Write(Project project, FileInfo outputFile)
{
var projectNode = new XElement("Project", new XAttribute("Sdk", "Microsoft.NET.Sdk"));
{
var projectNode = CreateXml(project, outputFile);

projectNode.Add(GetMainPropertyGroup(project, outputFile));
using (var filestream = File.Open(outputFile.FullName, FileMode.Create))
using (var streamWriter = new StreamWriter(filestream, Encoding.UTF8))
{
streamWriter.Write(projectNode.ToString());
}
}

if (project.ConditionalPropertyGroups != null)
{
projectNode.Add(project.ConditionalPropertyGroups.Select(RemoveAllNamespaces));
}
internal XElement CreateXml(Project project, FileInfo outputFile)
{
var projectNode = new XElement("Project", new XAttribute("Sdk", "Microsoft.NET.Sdk"));

if (project.ProjectReferences?.Count > 0)
{
var itemGroup = new XElement("ItemGroup");
foreach (var projectReference in project.ProjectReferences)
{
projectNode.Add(GetMainPropertyGroup(project, outputFile));

if (project.ConditionalPropertyGroups != null)
{
projectNode.Add(project.ConditionalPropertyGroups.Select(RemoveAllNamespaces));
}

if (project.ProjectReferences?.Count > 0)
{
var itemGroup = new XElement("ItemGroup");
foreach (var projectReference in project.ProjectReferences)
{
var projectReferenceElement = new XElement("ProjectReference",
new XAttribute("Include", projectReference.Include));

Expand All @@ -35,59 +46,55 @@ public void Write(Project project, FileInfo outputFile)
}

itemGroup.Add(projectReferenceElement);
}
}

projectNode.Add(itemGroup);
}

if (project.PackageReferences?.Count > 0)
{
var nugetReferences = new XElement("ItemGroup");
foreach (var packageReference in project.PackageReferences)
{
var reference = new XElement("PackageReference", new XAttribute("Include", packageReference.Id), new XAttribute("Version", packageReference.Version));
if (packageReference.IsDevelopmentDependency)
{
reference.Add(new XElement("PrivateAssets", "all"));
}

projectNode.Add(itemGroup);
}
nugetReferences.Add(reference);
}

if (project.PackageReferences?.Count > 0)
{
var nugetReferences = new XElement("ItemGroup");
foreach (var packageReference in project.PackageReferences)
{
var reference = new XElement("PackageReference", new XAttribute("Include", packageReference.Id), new XAttribute("Version", packageReference.Version));
if (packageReference.IsDevelopmentDependency)
{
reference.Add(new XElement("PrivateAssets", "all"));
}

nugetReferences.Add(reference);
}

projectNode.Add(nugetReferences);
}
projectNode.Add(nugetReferences);
}

if (project.AssemblyReferences?.Count > 0)
{
var assemblyReferences = new XElement("ItemGroup");
foreach (var assemblyReference in project.AssemblyReferences.Where(x => !IsDefaultIncludedAssemblyReference(x.Include)))
{
assemblyReferences.Add(MakeAssemblyReference(assemblyReference));
}
if (project.AssemblyReferences?.Count > 0)
{
var assemblyReferences = new XElement("ItemGroup");
foreach (var assemblyReference in project.AssemblyReferences.Where(x => !IsDefaultIncludedAssemblyReference(x.Include)))
{
assemblyReferences.Add(MakeAssemblyReference(assemblyReference));
}

projectNode.Add(assemblyReferences);
}
projectNode.Add(assemblyReferences);
}

// manual includes
if (project.ItemsToInclude?.Count > 0)
{
var includeGroup = new XElement("ItemGroup");
foreach (var include in project.ItemsToInclude.Select(RemoveAllNamespaces))
{
includeGroup.Add(include);
}
// manual includes
if (project.ItemsToInclude?.Count > 0)
{
var includeGroup = new XElement("ItemGroup");
foreach (var include in project.ItemsToInclude.Select(RemoveAllNamespaces))
{
includeGroup.Add(include);
}

projectNode.Add(includeGroup);
}
projectNode.Add(includeGroup);
}

using (var filestream = File.Open(outputFile.FullName, FileMode.Create))
using (var streamWriter = new StreamWriter(filestream, Encoding.UTF8))
{
streamWriter.Write(projectNode.ToString());
}
return projectNode;
}

private static XElement MakeAssemblyReference(AssemblyReference assemblyReference)
private static XElement MakeAssemblyReference(AssemblyReference assemblyReference)
{
var output = new XElement("Reference", new XAttribute("Include", assemblyReference.Include));

Expand Down Expand Up @@ -197,15 +204,32 @@ private void AddAssemblyAttributeNodes(XElement mainPropertyGroup, AssemblyAttri
return;
}

AddIfNotNull(mainPropertyGroup, "GenerateAssemblyTitleAttribute", "false");
AddIfNotNull(mainPropertyGroup, "GenerateAssemblyCompanyAttribute", "false");
AddIfNotNull(mainPropertyGroup, "GenerateAssemblyDescriptionAttribute", "false");
AddIfNotNull(mainPropertyGroup, "GenerateAssemblyProductAttribute", "false");
AddIfNotNull(mainPropertyGroup, "GenerateAssemblyCopyrightAttribute", "false");
AddIfNotNull(mainPropertyGroup, "GenerateAssemblyInformationalVersionAttribute", "false");
AddIfNotNull(mainPropertyGroup, "GenerateAssemblyVersionAttribute", "false");
AddIfNotNull(mainPropertyGroup, "GenerateAssemblyFileVersionAttribute", "false");
AddIfNotNull(mainPropertyGroup, "GenerateAssemblyConfigurationAttribute", "false");
var attributes = new[]
{
new KeyValuePair<string, string>("GenerateAssemblyTitleAttribute", assemblyAttributes.Title),
new KeyValuePair<string, string>("GenerateAssemblyCompanyAttribute", assemblyAttributes.Company),
new KeyValuePair<string, string>("GenerateAssemblyDescriptionAttribute", assemblyAttributes.Description),
new KeyValuePair<string, string>("GenerateAssemblyProductAttribute", assemblyAttributes.Product),
new KeyValuePair<string, string>("GenerateAssemblyCopyrightAttribute", assemblyAttributes.Copyright),
new KeyValuePair<string, string>("GenerateAssemblyInformationalVersionAttribute", assemblyAttributes.InformationalVersion),
new KeyValuePair<string, string>("GenerateAssemblyVersionAttribute", assemblyAttributes.Version),
new KeyValuePair<string, string>("GenerateAssemblyFileVersionAttribute", assemblyAttributes.FileVersion),
new KeyValuePair<string, string>("GenerateAssemblyConfigurationAttribute", assemblyAttributes.Configuration)
};

var childNodes = attributes
.Where(x => !string.IsNullOrWhiteSpace(x.Value))
.Select(x => new XElement(x.Key, "false"))
.ToArray();

if (childNodes.Length == 0)
{
mainPropertyGroup.Add(new XElement("GenerateAssemblyInfo", "false"));
}
else
{
mainPropertyGroup.Add(childNodes);
}
}

private void AddIfNotNull(XElement node, string elementName, string value)
Expand Down
46 changes: 46 additions & 0 deletions Project2015To2017Tests/ProjectWriterTest.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
using Microsoft.VisualStudio.TestTools.UnitTesting;
using Project2015To2017.Writing;
using System;
using System.Collections.Generic;
using System.Text;

namespace Project2015To2017Tests
{
[TestClass]
public class ProjectWriterTest
{
[TestMethod]
public void GenerateAssemblyInfoOnNothingSpecifiedTest()
{
var writer = new ProjectWriter();
var xmlNode = writer.CreateXml(new Project2015To2017.Definition.Project
{
AssemblyAttributes = new Project2015To2017.Definition.AssemblyAttributes()
}, new System.IO.FileInfo("test.cs"));

var generateAssemblyInfo = xmlNode.Element("PropertyGroup").Element("GenerateAssemblyInfo");
Assert.IsNotNull(generateAssemblyInfo);
Assert.AreEqual("false", generateAssemblyInfo.Value);
}

[TestMethod]
public void GeneratesAssemblyInfoNodesWhenSpecifiedTest()
{
var writer = new ProjectWriter();
var xmlNode = writer.CreateXml(new Project2015To2017.Definition.Project
{
AssemblyAttributes = new Project2015To2017.Definition.AssemblyAttributes
{
Company = "Company"
}
}, new System.IO.FileInfo("test.cs"));

var generateAssemblyInfo = xmlNode.Element("PropertyGroup").Element("GenerateAssemblyInfo");
Assert.IsNull(generateAssemblyInfo);

var generateAssemblyCompany = xmlNode.Element("PropertyGroup").Element("GenerateAssemblyCompanyAttribute");
Assert.IsNotNull(generateAssemblyCompany);
Assert.AreEqual("false", generateAssemblyCompany.Value);
}
}
}
6 changes: 0 additions & 6 deletions Project2015To2017Tests/TestClass.cs

This file was deleted.

0 comments on commit 45af218

Please sign in to comment.