Skip to content

Commit

Permalink
Split Project2015To2017 into Core and Migrate2017
Browse files Browse the repository at this point in the history
* Move almost everything to a new Core project
* Move VS15-related transformations to Migrate2017.Library
* Make ProjectConverter.Convert an extension method
* Retain umbrella-project Project2015To2017 to preserve NuGet package
* Move all common properties to Directory.Build.props
* Give Project2015To2017Tests a proper name with dot
* Update external NuGet dependencies
  • Loading branch information
andrew-boyarshin committed Sep 17, 2018
1 parent 7658e24 commit af07864
Show file tree
Hide file tree
Showing 191 changed files with 318 additions and 360 deletions.
17 changes: 17 additions & 0 deletions Directory.Build.props
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
<Project>

<PropertyGroup>
<LangVersion>7.3</LangVersion>
<Authors>hvanbakel et. al.</Authors>
<Product>Project2015To2017</Product>
<PackageProjectUrl>https://github.com/hvanbakel/CsprojToVs2017</PackageProjectUrl>
<PackageLicenseUrl>https://github.com/hvanbakel/CsprojToVs2017/blob/master/LICENSE</PackageLicenseUrl>
<RepositoryUrl>https://github.com/hvanbakel/CsprojToVs2017</RepositoryUrl>
<Copyright>Copyright Hans van Bakel</Copyright>
<Description>Tool for converting a MSBuild project file to VS2017 format and beyond.</Description>
<PackageTags>dotnet csproj fsproj vbproj msbuild conversion vs2015 vs14 vs15 vs2017</PackageTags>
<Version>3.0.2</Version>
<AssemblyVersion>3.0.0.0</AssemblyVersion>
</PropertyGroup>

</Project>
81 changes: 2 additions & 79 deletions Project2015To2017.Console/Program.cs
Original file line number Diff line number Diff line change
@@ -1,12 +1,10 @@
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using CommandLine;
using Microsoft.Extensions.Logging;
using Project2015To2017.Analysis;
using Project2015To2017.Definition;
using Project2015To2017.Reading;
using Project2015To2017.Migrate2017;
using Project2015To2017.Transforms;

namespace Project2015To2017.Console
Expand All @@ -27,7 +25,7 @@ private static void ConvertProject(Options options)

ILogger logger = new ConsoleLogger("console", (s, l) => l >= LogLevel.Information, true);

logger.LogWarning("csproj-to-2017 is deprecated and will be removed soon. Consider migrating to Project2015To2017.Migrate2017.Tool (dotnet migrate-2017)");
logger.LogError("csproj-to-2017 is obsolete and will be removed very soon. Migrate to Project2015To2017.Migrate2017.Tool (dotnet migrate-2017) as soon as possible.");

foreach (var file in options.Files)
{
Expand Down Expand Up @@ -83,80 +81,5 @@ private static void ConvertProject(Options options)
analyzer.Analyze(project);
}
}

private static IEnumerable<Project> Convert(this ProjectConverter self, string target, ILogger logger)
{
var extension = Path.GetExtension(target) ?? throw new ArgumentNullException(nameof(target));
if (extension.Length > 0)
{
var file = new FileInfo(target);

switch (extension)
{
case ".sln":
{
var solution = SolutionReader.Instance.Read(file, logger);
foreach (var project in self.ProcessSolutionFile(solution))
{
yield return project;
}
break;
}
case string s when ProjectConverter.ProjectFileMappings.ContainsKey(extension):
{
yield return self.ProcessProjectFile(file, null);
break;
}
default:
logger.LogCritical("Please specify a project or solution file.");
break;
}

yield break;
}

// Process the only solution in given directory
var solutionFiles = Directory.EnumerateFiles(target, "*.sln", SearchOption.TopDirectoryOnly).ToArray();
if (solutionFiles.Length == 1)
{
var solution = SolutionReader.Instance.Read(solutionFiles[0], logger);
foreach (var project in self.ProcessSolutionFile(solution))
{
yield return project;
}

yield break;
}

var projectsProcessed = 0;
// Process all csprojs found in given directory
foreach (var fileExtension in ProjectConverter.ProjectFileMappings.Keys)
{
var projectFiles = Directory.EnumerateFiles(target, "*" + fileExtension, SearchOption.AllDirectories).ToArray();
if (projectFiles.Length == 0)
{
continue;
}

if (projectFiles.Length > 1)
{
logger.LogInformation($"Multiple project files found under directory {target}:");
}

logger.LogInformation(string.Join(Environment.NewLine, projectFiles));

foreach (var projectFile in projectFiles)
{
// todo: rewrite both directory enumerations to use FileInfo instead of raw strings
yield return self.ProcessProjectFile(new FileInfo(projectFile), null);
projectsProcessed++;
}
}

if (projectsProcessed == 0)
{
logger.LogCritical("Please specify a project file.");
}
}
}
}
13 changes: 1 addition & 12 deletions Project2015To2017.Console/Project2015To2017.Console.csproj
Original file line number Diff line number Diff line change
@@ -1,20 +1,9 @@
<Project Sdk="Microsoft.NET.Sdk">

<PropertyGroup>
<RootNamespace>Project2015To2017.Console</RootNamespace>
<AssemblyName>Project2015To2017.Console</AssemblyName>
<PackageId>Project2015To2017.Cli</PackageId>
<Authors>hvanbakel et. al.</Authors>
<Product>Project2015To2017.Cli</Product>
<Description>Tool for converting a MSBuild project file to VS2017 format and beyond.</Description>
<PackageProjectUrl>https://github.com/hvanbakel/CsprojToVs2017</PackageProjectUrl>
<PackageLicenseUrl>https://github.com/hvanbakel/CsprojToVs2017/blob/master/LICENSE</PackageLicenseUrl>
<RepositoryUrl>https://github.com/hvanbakel/CsprojToVs2017</RepositoryUrl>
<Copyright>Copyright Hans van Bakel</Copyright>
<PackageTags>dotnet csproj conversion vs2015 vs2017</PackageTags>
<Version>3.0.2</Version>
<OutputType>Exe</OutputType>
<AssemblyVersion>3.0.0.0</AssemblyVersion>
</PropertyGroup>

<PropertyGroup Condition="$(Pack) != 'true'">
Expand All @@ -29,7 +18,7 @@
</PropertyGroup>

<ItemGroup>
<PackageReference Include="CommandLineParser" Version="2.2.1" />
<PackageReference Include="CommandLineParser" Version="2.3.0" />
<PackageReference Include="Microsoft.Extensions.Logging.Console" Version="2.1.1" />
</ItemGroup>

Expand Down
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
23 changes: 23 additions & 0 deletions Project2015To2017.Core/Project2015To2017.Core.csproj
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
<Project Sdk="Microsoft.NET.Sdk">

<PropertyGroup>
<TargetFrameworks>netstandard1.3;netstandard2.0</TargetFrameworks>
<RootNamespace>Project2015To2017</RootNamespace>
</PropertyGroup>

<ItemGroup>
<PackageReference Include="Microsoft.CodeAnalysis.CSharp" Version="2.9.0" />
<PackageReference Include="NuGet.Configuration" Version="4.6.2" />
<PackageReference Include="Microsoft.Extensions.Logging.Abstractions" Version="1.1.2" />
</ItemGroup>

<ItemGroup Condition="'$(TargetFrameworkVersion)' == 'v2.0'">
<PackageReference Include="System.Runtime.Caching" Version="4.5.0" />
<Compile Remove="Reading/ConditionEvaluator.LegacyCache.cs" />
</ItemGroup>

<ItemGroup Condition="'$(TargetFrameworkVersion)' == 'v1.3'">
<Compile Remove="Reading/ConditionEvaluator.ModernCache.cs" />
</ItemGroup>

</Project>
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
using System.Linq;
using System.Runtime.CompilerServices;

[assembly: InternalsVisibleTo("Project2015To2017Tests")]
[assembly: InternalsVisibleTo("Project2015To2017.Tests")]

namespace Project2015To2017
{
Expand Down Expand Up @@ -36,82 +36,7 @@ public ProjectConverter(
this.transformationSet = transformationSet ?? BasicReadTransformationSet.Instance;
this.projectReader = new ProjectReader(logger, this.conversionOptions);
}

public IEnumerable<Project> Convert(string target)
{
var extension = Path.GetExtension(target) ?? throw new ArgumentNullException(nameof(target));
if (extension.Length > 0)
{
var file = new FileInfo(target);
switch (extension)
{
case ".sln":
{
var solution = SolutionReader.Instance.Read(file, this.logger);
foreach (var project in ProcessSolutionFile(solution))
{
yield return project;
}
break;
}
case string s when ProjectFileMappings.ContainsKey(extension):
{
yield return this.ProcessProjectFile(file, null);
break;
}
default:
{
this.logger.LogCritical("Please specify a project or solution file.");
break;
}
}

yield break;
}

// Process the only solution in given directory
var solutionFiles = Directory.EnumerateFiles(target, "*.sln", SearchOption.TopDirectoryOnly).ToArray();
if (solutionFiles.Length == 1)
{
var solution = SolutionReader.Instance.Read(solutionFiles[0], this.logger);
foreach (var project in this.ProcessSolutionFile(solution))
{
yield return project;
}

yield break;
}

var projectsProcessed = 0;
// Process all csprojs found in given directory
foreach (var mapping in ProjectFileMappings)
{
var projectFiles = Directory.EnumerateFiles(target, "*" + mapping.Key, SearchOption.AllDirectories).ToArray();
if (projectFiles.Length == 0)
{
continue;
}

if (projectFiles.Length > 1)
{
this.logger.LogInformation($"Multiple project files found under directory {target}:");
}

this.logger.LogInformation(string.Join(Environment.NewLine, projectFiles));

foreach (var projectFile in projectFiles)
{
yield return this.ProcessProjectFile(new FileInfo(projectFile), null);
projectsProcessed++;
}
}

if (projectsProcessed == 0)
{
this.logger.LogCritical("Please specify a project file.");
}
}


public IEnumerable<Project> ProcessSolutionFile(Solution solution)
{
this.logger.LogTrace("Solution parsing started.");
Expand Down
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
<Project Sdk="Microsoft.NET.Sdk">

<PropertyGroup>
<TargetFrameworks>netstandard1.3;netstandard2.0</TargetFrameworks>
<RootNamespace>Project2015To2017.Migrate2017</RootNamespace>
</PropertyGroup>

<ItemGroup>
<ProjectReference Include="..\Project2015To2017.Core\Project2015To2017.Core.csproj" />
</ItemGroup>

</Project>
Original file line number Diff line number Diff line change
@@ -1,8 +1,9 @@
using System.Collections.Immutable;
using System.Linq;
using Project2015To2017.Definition;
using Project2015To2017.Transforms;

namespace Project2015To2017.Transforms
namespace Project2015To2017.Migrate2017.Transforms
{
public sealed class AssemblyFilterDefaultTransformation : ILegacyOnlyProjectTransformation
{
Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,9 @@
using System.IO;
using System.Linq;
using Project2015To2017.Definition;
using Project2015To2017.Transforms;

namespace Project2015To2017.Transforms
namespace Project2015To2017.Migrate2017.Transforms
{
public sealed class AssemblyFilterHintedPackageReferencesTransformation : ILegacyOnlyProjectTransformation
{
Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,9 @@
using System.Collections.Generic;
using System.Linq;
using Project2015To2017.Definition;
using Project2015To2017.Transforms;

namespace Project2015To2017.Transforms
namespace Project2015To2017.Migrate2017.Transforms
{
public sealed class AssemblyFilterPackageReferencesTransformation : ILegacyOnlyProjectTransformation
{
Expand Down
Original file line number Diff line number Diff line change
@@ -1,13 +1,13 @@
using System;
using System.Collections.Generic;
using System.Collections.Immutable;
using System.IO;
using System.Linq;
using System.Xml.Linq;
using Microsoft.Extensions.Logging;
using Project2015To2017.Definition;
using Project2015To2017.Transforms;

namespace Project2015To2017.Transforms
namespace Project2015To2017.Migrate2017.Transforms
{
public sealed class FileTransformation : ILegacyOnlyProjectTransformation
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,9 @@
using System.Linq;
using System.Xml.Linq;
using Project2015To2017.Definition;
using Project2015To2017.Transforms;

namespace Project2015To2017.Transforms
namespace Project2015To2017.Migrate2017.Transforms
{
public sealed class ImportsTargetsFilterPackageReferencesTransformation : ILegacyOnlyProjectTransformation
{
Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,9 @@
using System.Linq;
using Microsoft.Extensions.Logging;
using Project2015To2017.Definition;
using Project2015To2017.Transforms;

namespace Project2015To2017.Transforms
namespace Project2015To2017.Migrate2017.Transforms
{
public sealed class TestProjectPackageReferenceTransformation : ILegacyOnlyProjectTransformation
{
Expand Down
Original file line number Diff line number Diff line change
@@ -1,12 +1,13 @@
using Microsoft.Extensions.Logging;
using Project2015To2017.Definition;
using System;
using System.Collections.Immutable;
using System.IO;
using System.Linq;
using System.Xml.Linq;
using Microsoft.Extensions.Logging;
using Project2015To2017.Definition;
using Project2015To2017.Transforms;

namespace Project2015To2017.Transforms
namespace Project2015To2017.Migrate2017.Transforms
{
public sealed class XamlPagesTransformation : ILegacyOnlyProjectTransformation
{
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
using System.Collections.Generic;
using Microsoft.Extensions.Logging;
using Project2015To2017.Migrate2017.Transforms;
using Project2015To2017.Transforms;

namespace Project2015To2017.Transforms
namespace Project2015To2017.Migrate2017
{
public class Vs15TransformationSet : ITransformationSet
{
Expand Down
Loading

0 comments on commit af07864

Please sign in to comment.