Addressing code review comments by Adding an enum, renaming the PackageConstants and making the Sdk.Web version the same as the Sdk version.

This commit is contained in:
Livar Cunha 2016-10-31 11:00:43 -07:00
parent c3b57f2e72
commit b45a3ba698
7 changed files with 82 additions and 61 deletions

View file

@ -1,7 +0,0 @@
namespace Microsoft.DotNet.ProjectJsonMigration
{
internal class ConstantPackageVersions
{
public const string WebSdkPackageVersion = "1.0.0-alpha-20161026-2";
}
}

View file

@ -3,9 +3,9 @@
namespace Microsoft.DotNet.ProjectJsonMigration
{
internal class ConstantPackageNames
internal class PackageConstants
{
public const string CSdkPackageName = "Microsoft.NET.Sdk";
public const string CWebSdkPackageName = "Microsoft.NET.Sdk.Web";
public const string SdkPackageName = "Microsoft.NET.Sdk";
public const string WebSdkPackageName = "Microsoft.NET.Sdk.Web";
}
}

View file

@ -9,20 +9,20 @@ using Microsoft.DotNet.Internal.ProjectModel;
namespace Microsoft.DotNet.ProjectJsonMigration
{
internal static class ProjectTypeDetector
internal static class ProjectExtensions
{
public static string TryDetectProjectType(Project project)
public static ProjectType GetProjectType(this Project project)
{
string projectType = null;
if (IsWebProject(project))
var projectType = ProjectType.Console;
if (project.IsWebProject())
{
projectType = "web";
projectType = ProjectType.Web;
}
return projectType;
}
private static bool IsWebProject(Project project)
private static bool IsWebProject(this Project project)
{
if(project.IsTestProject)
{
@ -31,7 +31,7 @@ namespace Microsoft.DotNet.ProjectJsonMigration
var isExecutable = project.GetCompilerOptions(null, "Debug").EmitEntryPoint.GetValueOrDefault();
if (isExecutable
&& HasAnyPackageContainingName(project, ".AspNetCore."))
&& project.HasAnyPackageContainingName(".AspNetCore."))
{
return true;
}
@ -39,7 +39,7 @@ namespace Microsoft.DotNet.ProjectJsonMigration
return false;
}
private static bool HasAnyPackageContainingName(Project project, string nameSegment)
private static bool HasAnyPackageContainingName(this Project project, string nameSegment)
{
var containsPackageName = HasAnyPackageContainingName(
new ReadOnlyCollection<ProjectLibraryDependency>(project.Dependencies),

View file

@ -0,0 +1,8 @@
namespace Microsoft.DotNet.ProjectJsonMigration
{
internal enum ProjectType
{
Console,
Web
}
}

View file

@ -44,12 +44,15 @@ namespace Microsoft.DotNet.ProjectJsonMigration.Rules
PackageDependencyInfoTransform.Transform(
new PackageDependencyInfo
{
Name = ConstantPackageNames.CSdkPackageName,
Name = PackageConstants.SdkPackageName,
Version = migrationSettings.SdkPackageVersion,
PrivateAssets = "All"
}), noFrameworkPackageReferenceItemGroup, mergeExisting: false);
AddProjectTypeSpecificDependencies(migrationRuleInputs, noFrameworkPackageReferenceItemGroup);
AddProjectTypeSpecificDependencies(
migrationRuleInputs,
migrationSettings,
noFrameworkPackageReferenceItemGroup);
// Migrate Direct Deps first
MigrateDependencies(
@ -80,26 +83,30 @@ namespace Microsoft.DotNet.ProjectJsonMigration.Rules
private void AddProjectTypeSpecificDependencies(
MigrationRuleInputs migrationRuleInputs,
MigrationSettings migrationSettings,
ProjectItemGroupElement noFrameworkPackageReferenceItemGroup)
{
var type = ProjectTypeDetector.TryDetectProjectType(
migrationRuleInputs.DefaultProjectContext.ProjectFile);
var type = migrationRuleInputs.DefaultProjectContext.ProjectFile.GetProjectType();
switch (type)
{
case "web":
case ProjectType.Web:
_transformApplicator.Execute(
PackageDependencyInfoTransform.Transform(
new PackageDependencyInfo
{
Name = ConstantPackageNames.CWebSdkPackageName,
Version = ConstantPackageVersions.WebSdkPackageVersion,
Name = PackageConstants.WebSdkPackageName,
Version = migrationSettings.SdkPackageVersion,
PrivateAssets = "All"
}), noFrameworkPackageReferenceItemGroup, mergeExisting: false);
break;
default:
break;
}
}
private void MigrateImports(ProjectPropertyGroupElement commonPropertyGroup, TargetFrameworkInformation targetFramework)
private void MigrateImports(
ProjectPropertyGroupElement commonPropertyGroup,
TargetFrameworkInformation targetFramework)
{
var transform = ImportsTransformation.Transform(targetFramework);
@ -191,7 +198,10 @@ namespace Microsoft.DotNet.ProjectJsonMigration.Rules
}
}
_transformApplicator.Execute(transform.Transform(packageDependency), itemGroup, mergeExisting: true);
_transformApplicator.Execute(
transform.Transform(packageDependency),
itemGroup,
mergeExisting: true);
}
}
@ -211,7 +221,8 @@ namespace Microsoft.DotNet.ProjectJsonMigration.Rules
private void InjectAssemblyReferenceIfNotPresent(string dependencyName,
IList<ProjectLibraryDependency> packageDependencies)
{
if (!packageDependencies.Any(dep => string.Equals(dep.Name, dependencyName, StringComparison.OrdinalIgnoreCase)))
if (!packageDependencies.Any(dep =>
string.Equals(dep.Name, dependencyName, StringComparison.OrdinalIgnoreCase)))
{
packageDependencies.Add(new ProjectLibraryDependency
{
@ -261,12 +272,16 @@ namespace Microsoft.DotNet.ProjectJsonMigration.Rules
return flagString;
}
private IEnumerable<string> GetAllProjectReferenceNames(Project project, NuGetFramework framework, ProjectRootElement xproj)
private IEnumerable<string> GetAllProjectReferenceNames(
Project project,
NuGetFramework framework,
ProjectRootElement xproj)
{
var csprojReferenceItems = _projectDependencyFinder.ResolveXProjProjectDependencies(xproj);
var migratedXProjDependencyPaths = csprojReferenceItems.SelectMany(p => p.Includes());
var migratedXProjDependencyNames = new HashSet<string>(migratedXProjDependencyPaths.Select(p => Path.GetFileNameWithoutExtension(
PathUtility.GetPathWithDirectorySeparator(p))));
var migratedXProjDependencyNames =
new HashSet<string>(migratedXProjDependencyPaths.Select(p =>
Path.GetFileNameWithoutExtension(PathUtility.GetPathWithDirectorySeparator(p))));
var projectDependencies = _projectDependencyFinder.ResolveDirectProjectDependenciesForFramework(
project,
framework,
@ -275,38 +290,43 @@ namespace Microsoft.DotNet.ProjectJsonMigration.Rules
return projectDependencies.Select(p => p.Name).Concat(migratedXProjDependencyNames);
}
private AddItemTransform<ProjectLibraryDependency> FrameworkDependencyTransform => new AddItemTransform<ProjectLibraryDependency>(
"Reference",
dep => dep.Name,
dep => "",
dep => true);
private AddItemTransform<ProjectLibraryDependency> FrameworkDependencyTransform =>
new AddItemTransform<ProjectLibraryDependency>(
"Reference",
dep => dep.Name,
dep => "",
dep => true);
private Func<AddItemTransform<ProjectLibraryDependency>> PackageDependencyTransform => () => new AddItemTransform<ProjectLibraryDependency>(
"PackageReference",
dep => dep.Name,
dep => "",
dep => true)
.WithMetadata("Version", r => r.LibraryRange.VersionRange.OriginalString);
private Func<AddItemTransform<ProjectLibraryDependency>> PackageDependencyTransform =>
() => new AddItemTransform<ProjectLibraryDependency>(
"PackageReference",
dep => dep.Name,
dep => "",
dep => true)
.WithMetadata("Version", r => r.LibraryRange.VersionRange.OriginalString);
private AddItemTransform<PackageDependencyInfo> PackageDependencyInfoTransform => new AddItemTransform<PackageDependencyInfo>(
"PackageReference",
dep => dep.Name,
dep => "",
dep => true)
.WithMetadata("Version", r => r.Version)
.WithMetadata("PrivateAssets", r => r.PrivateAssets, r => !string.IsNullOrEmpty(r.PrivateAssets));
private AddItemTransform<PackageDependencyInfo> PackageDependencyInfoTransform =>
new AddItemTransform<PackageDependencyInfo>(
"PackageReference",
dep => dep.Name,
dep => "",
dep => true)
.WithMetadata("Version", r => r.Version)
.WithMetadata("PrivateAssets", r => r.PrivateAssets, r => !string.IsNullOrEmpty(r.PrivateAssets));
private AddItemTransform<ProjectLibraryDependency> ToolTransform => new AddItemTransform<ProjectLibraryDependency>(
"DotNetCliToolReference",
dep => dep.Name,
dep => "",
dep => true)
.WithMetadata("Version", r => r.LibraryRange.VersionRange.OriginalString);
private AddItemTransform<ProjectLibraryDependency> ToolTransform =>
new AddItemTransform<ProjectLibraryDependency>(
"DotNetCliToolReference",
dep => dep.Name,
dep => "",
dep => true)
.WithMetadata("Version", r => r.LibraryRange.VersionRange.OriginalString);
private AddPropertyTransform<TargetFrameworkInformation> ImportsTransformation => new AddPropertyTransform<TargetFrameworkInformation>(
"PackageTargetFallback",
t => $"$(PackageTargetFallback);{string.Join(";", t.Imports)}",
t => t.Imports.OrEmptyIfNull().Any());
private AddPropertyTransform<TargetFrameworkInformation> ImportsTransformation =>
new AddPropertyTransform<TargetFrameworkInformation>(
"PackageTargetFallback",
t => $"$(PackageTargetFallback);{string.Join(";", t.Imports)}",
t => t.Imports.OrEmptyIfNull().Any());
private class PackageDependencyInfo
{

View file

@ -72,7 +72,7 @@ namespace Microsoft.DotNet.ProjectJsonMigration.Rules
{
var packageRefs = outputMSBuildProject
.Items
.Where(i => i.ItemType == "PackageReference" && i.Include != ConstantPackageNames.CSdkPackageName)
.Where(i => i.ItemType == "PackageReference" && i.Include != PackageConstants.SdkPackageName)
.ToList();
foreach (var packageRef in packageRefs)

View file

@ -11,7 +11,7 @@ namespace Microsoft.DotNet.Tools.Migrate
return projectRootElement
.Items
.Where(i => i.ItemType == "PackageReference")
.First(i => i.Include == ConstantPackageNames.CSdkPackageName)
.First(i => i.Include == PackageConstants.SdkPackageName)
.GetMetadataWithName("version").Value;
}
}