From e847389fc2063d40608ec40d55fcb3e8fc977e70 Mon Sep 17 00:00:00 2001 From: Mike Lorbetske Date: Fri, 28 Oct 2016 13:39:07 -0700 Subject: [PATCH 1/5] Update migration to use the web template as a base for web projects --- .../ConstantPackageNames.cs | 1 + .../ConstantPackageVersions.cs | 7 +++ .../ProjectTypeDetector.cs | 60 +++++++++++++++++++ .../MigratePackageDependenciesAndToolsRule.cs | 23 +++++++ ...enThatIWantToMigratePackageDependencies.cs | 20 +++++++ 5 files changed, 111 insertions(+) create mode 100644 src/Microsoft.DotNet.ProjectJsonMigration/ConstantPackageVersions.cs create mode 100644 src/Microsoft.DotNet.ProjectJsonMigration/ProjectTypeDetector.cs diff --git a/src/Microsoft.DotNet.ProjectJsonMigration/ConstantPackageNames.cs b/src/Microsoft.DotNet.ProjectJsonMigration/ConstantPackageNames.cs index ada280bbf..4ccdbc3e6 100644 --- a/src/Microsoft.DotNet.ProjectJsonMigration/ConstantPackageNames.cs +++ b/src/Microsoft.DotNet.ProjectJsonMigration/ConstantPackageNames.cs @@ -6,5 +6,6 @@ namespace Microsoft.DotNet.ProjectJsonMigration internal class ConstantPackageNames { public const string CSdkPackageName = "Microsoft.NET.Sdk"; + public const string CWebSdkPackageName = "Microsoft.NET.Sdk.Web"; } } \ No newline at end of file diff --git a/src/Microsoft.DotNet.ProjectJsonMigration/ConstantPackageVersions.cs b/src/Microsoft.DotNet.ProjectJsonMigration/ConstantPackageVersions.cs new file mode 100644 index 000000000..e20824810 --- /dev/null +++ b/src/Microsoft.DotNet.ProjectJsonMigration/ConstantPackageVersions.cs @@ -0,0 +1,7 @@ +namespace Microsoft.DotNet.ProjectJsonMigration +{ + internal class ConstantPackageVersions + { + public const string WebSdkPackageVersion = "1.0.0-alpha-20161027-4-91"; + } +} diff --git a/src/Microsoft.DotNet.ProjectJsonMigration/ProjectTypeDetector.cs b/src/Microsoft.DotNet.ProjectJsonMigration/ProjectTypeDetector.cs new file mode 100644 index 000000000..1f4032143 --- /dev/null +++ b/src/Microsoft.DotNet.ProjectJsonMigration/ProjectTypeDetector.cs @@ -0,0 +1,60 @@ +// Copyright (c) .NET Foundation and contributors. All rights reserved. +// Licensed under the MIT license. See LICENSE file in the project root for full license info + +using System; +using System.IO; +using System.Linq; +using Microsoft.DotNet.Internal.ProjectModel; + +namespace Microsoft.DotNet.ProjectJsonMigration +{ + public static class ProjectTypeDetector + { + public static bool TryDetectProjectType(string projectDirectory, out string projectType) + { + string projectJsonFile = Path.Combine(projectDirectory, "project.json"); + if (!File.Exists(projectJsonFile)) + { + projectType = null; + return false; + } + + if (IsWebProject(projectJsonFile)) + { + projectType = "web"; + return true; + } + + projectType = null; + return false; + } + + private static bool IsWebProject(string projectJsonFile) + { + Project project; + if (ProjectReader.TryGetProject(projectJsonFile, out project)) + { + if(project.IsTestProject) + { + return false; + } + + foreach (var tf in project.GetTargetFrameworks()) + { + if (tf.CompilerOptions.EmitEntryPoint.GetValueOrDefault() + && HasAnyPackageContainingName(tf, ".AspNetCore.")) + { + return true; + } + } + } + + return false; + } + + private static bool HasAnyPackageContainingName(TargetFrameworkInformation tf, string nameSegment) + { + return tf.Dependencies.Any(x => x.Name.IndexOf(nameSegment, StringComparison.OrdinalIgnoreCase) > -1); + } + } +} \ No newline at end of file diff --git a/src/Microsoft.DotNet.ProjectJsonMigration/Rules/MigratePackageDependenciesAndToolsRule.cs b/src/Microsoft.DotNet.ProjectJsonMigration/Rules/MigratePackageDependenciesAndToolsRule.cs index 3f1a5de38..d1708e45b 100644 --- a/src/Microsoft.DotNet.ProjectJsonMigration/Rules/MigratePackageDependenciesAndToolsRule.cs +++ b/src/Microsoft.DotNet.ProjectJsonMigration/Rules/MigratePackageDependenciesAndToolsRule.cs @@ -39,6 +39,8 @@ namespace Microsoft.DotNet.ProjectJsonMigration.Rules var noFrameworkPackageReferenceItemGroup = migrationRuleInputs.OutputMSBuildProject.AddItemGroup(); + AddProjectTypeSpecificDependencies(migrationSettings, noFrameworkPackageReferenceItemGroup); + // Inject Sdk dependency _transformApplicator.Execute( PackageDependencyInfoTransform.Transform( @@ -76,6 +78,27 @@ namespace Microsoft.DotNet.ProjectJsonMigration.Rules MigrateTools(project, migrationRuleInputs.OutputMSBuildProject); } + private void AddProjectTypeSpecificDependencies(MigrationSettings migrationSettings, ProjectItemGroupElement noFrameworkPackageReferenceItemGroup) + { + string type; + if (ProjectTypeDetector.TryDetectProjectType(migrationSettings.ProjectDirectory, out type)) + { + switch (type) + { + case "web": + _transformApplicator.Execute( + PackageDependencyInfoTransform.Transform( + new PackageDependencyInfo + { + Name = ConstantPackageNames.CWebSdkPackageName, + Version = ConstantPackageVersions.WebSdkPackageVersion, + PrivateAssets = "All" + }), noFrameworkPackageReferenceItemGroup, mergeExisting: false); + break; + } + } + } + private void MigrateImports(ProjectPropertyGroupElement commonPropertyGroup, TargetFrameworkInformation targetFramework) { var transform = ImportsTransformation.Transform(targetFramework); diff --git a/test/Microsoft.DotNet.ProjectJsonMigration.Tests/Rules/GivenThatIWantToMigratePackageDependencies.cs b/test/Microsoft.DotNet.ProjectJsonMigration.Tests/Rules/GivenThatIWantToMigratePackageDependencies.cs index b7de22eb5..794942193 100644 --- a/test/Microsoft.DotNet.ProjectJsonMigration.Tests/Rules/GivenThatIWantToMigratePackageDependencies.cs +++ b/test/Microsoft.DotNet.ProjectJsonMigration.Tests/Rules/GivenThatIWantToMigratePackageDependencies.cs @@ -49,6 +49,26 @@ namespace Microsoft.DotNet.ProjectJsonMigration.Tests privateAssetsMetadata.Value.Should().Be("All"); } + [Fact] + public void It_migrates_web_projects_to_have_web_sdk_PrivateAssets() + { + var mockProj = RunPackageDependenciesRuleOnPj(@" + { + ""dependencies"": { + ""Microsoft.AspNetCore.Mvc"" : { + ""version"": ""1.0.0"" + } + } + }"); + + + var packageRef = mockProj.Items.First(i => i.Include == "Microsoft.NET.Sdk.Web" && i.ItemType == "PackageReference"); + + var privateAssetsMetadata = packageRef.GetMetadataWithName("PrivateAssets"); + privateAssetsMetadata.Value.Should().NotBeNull(); + privateAssetsMetadata.Value.Should().Be("All"); + } + [Fact] public void It_migrates_suppress_parent_array_to_PrivateAssets() { From 2d270925133159f9ecb88d9e9f7d504f49643f7a Mon Sep 17 00:00:00 2001 From: Mike Lorbetske Date: Fri, 28 Oct 2016 14:10:34 -0700 Subject: [PATCH 2/5] Fix the test for web project migration --- .../Rules/GivenThatIWantToMigratePackageDependencies.cs | 3 +++ 1 file changed, 3 insertions(+) diff --git a/test/Microsoft.DotNet.ProjectJsonMigration.Tests/Rules/GivenThatIWantToMigratePackageDependencies.cs b/test/Microsoft.DotNet.ProjectJsonMigration.Tests/Rules/GivenThatIWantToMigratePackageDependencies.cs index 794942193..301ca5ffa 100644 --- a/test/Microsoft.DotNet.ProjectJsonMigration.Tests/Rules/GivenThatIWantToMigratePackageDependencies.cs +++ b/test/Microsoft.DotNet.ProjectJsonMigration.Tests/Rules/GivenThatIWantToMigratePackageDependencies.cs @@ -54,6 +54,9 @@ namespace Microsoft.DotNet.ProjectJsonMigration.Tests { var mockProj = RunPackageDependenciesRuleOnPj(@" { + ""buildOptions"": { + ""emitEntryPoint"": true + }, ""dependencies"": { ""Microsoft.AspNetCore.Mvc"" : { ""version"": ""1.0.0"" From 9e88b811a0026fad1e28c3491b92dd416489050e Mon Sep 17 00:00:00 2001 From: Livar Cunha Date: Fri, 28 Oct 2016 22:11:13 -0700 Subject: [PATCH 3/5] Refactoring the ProjectTypeDetector to use the Project in the MigrationInputs. --- .../ProjectTypeDetector.cs | 57 +++++++++++-------- .../MigratePackageDependenciesAndToolsRule.cs | 36 ++++++------ ...enThatIWantToMigratePackageDependencies.cs | 12 ++-- 3 files changed, 57 insertions(+), 48 deletions(-) diff --git a/src/Microsoft.DotNet.ProjectJsonMigration/ProjectTypeDetector.cs b/src/Microsoft.DotNet.ProjectJsonMigration/ProjectTypeDetector.cs index 1f4032143..f0943bee3 100644 --- a/src/Microsoft.DotNet.ProjectJsonMigration/ProjectTypeDetector.cs +++ b/src/Microsoft.DotNet.ProjectJsonMigration/ProjectTypeDetector.cs @@ -2,59 +2,66 @@ // Licensed under the MIT license. See LICENSE file in the project root for full license info using System; -using System.IO; +using System.Collections.Generic; +using System.Collections.ObjectModel; using System.Linq; using Microsoft.DotNet.Internal.ProjectModel; namespace Microsoft.DotNet.ProjectJsonMigration { - public static class ProjectTypeDetector + internal static class ProjectTypeDetector { - public static bool TryDetectProjectType(string projectDirectory, out string projectType) + public static string TryDetectProjectType(Project project) { - string projectJsonFile = Path.Combine(projectDirectory, "project.json"); - if (!File.Exists(projectJsonFile)) + string projectType = null; + if (IsWebProject(project)) + { + projectType = "web"; + } + + return projectType; + } + + private static bool IsWebProject(Project project) + { + if(project.IsTestProject) { - projectType = null; return false; } - if (IsWebProject(projectJsonFile)) + var isExecutable = project.GetCompilerOptions(null, "Debug").EmitEntryPoint.GetValueOrDefault(); + if (isExecutable + && HasAnyPackageContainingName(project, ".AspNetCore.")) { - projectType = "web"; return true; } - projectType = null; return false; } - private static bool IsWebProject(string projectJsonFile) + private static bool HasAnyPackageContainingName(Project project, string nameSegment) { - Project project; - if (ProjectReader.TryGetProject(projectJsonFile, out project)) + var containsPackageName = HasAnyPackageContainingName( + new ReadOnlyCollection(project.Dependencies), + nameSegment); + foreach (var tf in project.GetTargetFrameworks()) { - if(project.IsTestProject) + if(containsPackageName) { - return false; + break; } - foreach (var tf in project.GetTargetFrameworks()) - { - if (tf.CompilerOptions.EmitEntryPoint.GetValueOrDefault() - && HasAnyPackageContainingName(tf, ".AspNetCore.")) - { - return true; - } - } + containsPackageName = HasAnyPackageContainingName(tf.Dependencies, nameSegment); } - return false; + return containsPackageName; } - private static bool HasAnyPackageContainingName(TargetFrameworkInformation tf, string nameSegment) + private static bool HasAnyPackageContainingName( + IReadOnlyList dependencies, + string nameSegment) { - return tf.Dependencies.Any(x => x.Name.IndexOf(nameSegment, StringComparison.OrdinalIgnoreCase) > -1); + return dependencies.Any(x => x.Name.IndexOf(nameSegment, StringComparison.OrdinalIgnoreCase) > -1); } } } \ No newline at end of file diff --git a/src/Microsoft.DotNet.ProjectJsonMigration/Rules/MigratePackageDependenciesAndToolsRule.cs b/src/Microsoft.DotNet.ProjectJsonMigration/Rules/MigratePackageDependenciesAndToolsRule.cs index d1708e45b..273aa4db4 100644 --- a/src/Microsoft.DotNet.ProjectJsonMigration/Rules/MigratePackageDependenciesAndToolsRule.cs +++ b/src/Microsoft.DotNet.ProjectJsonMigration/Rules/MigratePackageDependenciesAndToolsRule.cs @@ -39,8 +39,6 @@ namespace Microsoft.DotNet.ProjectJsonMigration.Rules var noFrameworkPackageReferenceItemGroup = migrationRuleInputs.OutputMSBuildProject.AddItemGroup(); - AddProjectTypeSpecificDependencies(migrationSettings, noFrameworkPackageReferenceItemGroup); - // Inject Sdk dependency _transformApplicator.Execute( PackageDependencyInfoTransform.Transform( @@ -50,6 +48,8 @@ namespace Microsoft.DotNet.ProjectJsonMigration.Rules Version = migrationSettings.SdkPackageVersion, PrivateAssets = "All" }), noFrameworkPackageReferenceItemGroup, mergeExisting: false); + + AddProjectTypeSpecificDependencies(migrationRuleInputs, noFrameworkPackageReferenceItemGroup); // Migrate Direct Deps first MigrateDependencies( @@ -78,24 +78,24 @@ namespace Microsoft.DotNet.ProjectJsonMigration.Rules MigrateTools(project, migrationRuleInputs.OutputMSBuildProject); } - private void AddProjectTypeSpecificDependencies(MigrationSettings migrationSettings, ProjectItemGroupElement noFrameworkPackageReferenceItemGroup) + private void AddProjectTypeSpecificDependencies( + MigrationRuleInputs migrationRuleInputs, + ProjectItemGroupElement noFrameworkPackageReferenceItemGroup) { - string type; - if (ProjectTypeDetector.TryDetectProjectType(migrationSettings.ProjectDirectory, out type)) + var type = ProjectTypeDetector.TryDetectProjectType( + migrationRuleInputs.DefaultProjectContext.ProjectFile); + switch (type) { - switch (type) - { - case "web": - _transformApplicator.Execute( - PackageDependencyInfoTransform.Transform( - new PackageDependencyInfo - { - Name = ConstantPackageNames.CWebSdkPackageName, - Version = ConstantPackageVersions.WebSdkPackageVersion, - PrivateAssets = "All" - }), noFrameworkPackageReferenceItemGroup, mergeExisting: false); - break; - } + case "web": + _transformApplicator.Execute( + PackageDependencyInfoTransform.Transform( + new PackageDependencyInfo + { + Name = ConstantPackageNames.CWebSdkPackageName, + Version = ConstantPackageVersions.WebSdkPackageVersion, + PrivateAssets = "All" + }), noFrameworkPackageReferenceItemGroup, mergeExisting: false); + break; } } diff --git a/test/Microsoft.DotNet.ProjectJsonMigration.Tests/Rules/GivenThatIWantToMigratePackageDependencies.cs b/test/Microsoft.DotNet.ProjectJsonMigration.Tests/Rules/GivenThatIWantToMigratePackageDependencies.cs index 301ca5ffa..071b69dca 100644 --- a/test/Microsoft.DotNet.ProjectJsonMigration.Tests/Rules/GivenThatIWantToMigratePackageDependencies.cs +++ b/test/Microsoft.DotNet.ProjectJsonMigration.Tests/Rules/GivenThatIWantToMigratePackageDependencies.cs @@ -61,15 +61,17 @@ namespace Microsoft.DotNet.ProjectJsonMigration.Tests ""Microsoft.AspNetCore.Mvc"" : { ""version"": ""1.0.0"" } + }, + ""frameworks"": { + ""netcoreapp1.0"": {} } }"); + var packageRef = mockProj.Items.FirstOrDefault(i => + i.Include == "Microsoft.NET.Sdk.Web" && i.ItemType == "PackageReference"); - var packageRef = mockProj.Items.First(i => i.Include == "Microsoft.NET.Sdk.Web" && i.ItemType == "PackageReference"); - - var privateAssetsMetadata = packageRef.GetMetadataWithName("PrivateAssets"); - privateAssetsMetadata.Value.Should().NotBeNull(); - privateAssetsMetadata.Value.Should().Be("All"); + packageRef.Should().NotBeNull(); + packageRef.GetMetadataWithName("PrivateAssets").Value.Should().NotBeNull().And.Be("All"); } [Fact] From c3b57f2e72d91d2338db21e1f0b365da35bb772f Mon Sep 17 00:00:00 2001 From: Livar Cunha Date: Sun, 30 Oct 2016 21:32:11 -0700 Subject: [PATCH 4/5] Changing the Sdk.Web version to match the current SDK version so that we can update them together. Also added the dotnet-web to the migrated tests. --- .../ConstantPackageVersions.cs | 2 +- test/dotnet-migrate.Tests/NuGet.tempaspnetpatch.config | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/src/Microsoft.DotNet.ProjectJsonMigration/ConstantPackageVersions.cs b/src/Microsoft.DotNet.ProjectJsonMigration/ConstantPackageVersions.cs index e20824810..2a4a18526 100644 --- a/src/Microsoft.DotNet.ProjectJsonMigration/ConstantPackageVersions.cs +++ b/src/Microsoft.DotNet.ProjectJsonMigration/ConstantPackageVersions.cs @@ -2,6 +2,6 @@ { internal class ConstantPackageVersions { - public const string WebSdkPackageVersion = "1.0.0-alpha-20161027-4-91"; + public const string WebSdkPackageVersion = "1.0.0-alpha-20161026-2"; } } diff --git a/test/dotnet-migrate.Tests/NuGet.tempaspnetpatch.config b/test/dotnet-migrate.Tests/NuGet.tempaspnetpatch.config index 9d03a414f..41ba66505 100644 --- a/test/dotnet-migrate.Tests/NuGet.tempaspnetpatch.config +++ b/test/dotnet-migrate.Tests/NuGet.tempaspnetpatch.config @@ -5,6 +5,7 @@ + \ No newline at end of file From b45a3ba698fd4358a9707cf1fe47f8919cc755dc Mon Sep 17 00:00:00 2001 From: Livar Cunha Date: Mon, 31 Oct 2016 11:00:43 -0700 Subject: [PATCH 5/5] Addressing code review comments by Adding an enum, renaming the PackageConstants and making the Sdk.Web version the same as the Sdk version. --- .../ConstantPackageVersions.cs | 7 -- ...antPackageNames.cs => PackageConstants.cs} | 6 +- ...ctTypeDetector.cs => ProjectExtensions.cs} | 16 +-- .../ProjectType.cs | 8 ++ .../MigratePackageDependenciesAndToolsRule.cs | 102 +++++++++++------- .../Rules/MigrateTFMRule.cs | 2 +- .../ProjectRootElementExtensions.cs | 2 +- 7 files changed, 82 insertions(+), 61 deletions(-) delete mode 100644 src/Microsoft.DotNet.ProjectJsonMigration/ConstantPackageVersions.cs rename src/Microsoft.DotNet.ProjectJsonMigration/{ConstantPackageNames.cs => PackageConstants.cs} (56%) rename src/Microsoft.DotNet.ProjectJsonMigration/{ProjectTypeDetector.cs => ProjectExtensions.cs} (77%) create mode 100644 src/Microsoft.DotNet.ProjectJsonMigration/ProjectType.cs diff --git a/src/Microsoft.DotNet.ProjectJsonMigration/ConstantPackageVersions.cs b/src/Microsoft.DotNet.ProjectJsonMigration/ConstantPackageVersions.cs deleted file mode 100644 index 2a4a18526..000000000 --- a/src/Microsoft.DotNet.ProjectJsonMigration/ConstantPackageVersions.cs +++ /dev/null @@ -1,7 +0,0 @@ -namespace Microsoft.DotNet.ProjectJsonMigration -{ - internal class ConstantPackageVersions - { - public const string WebSdkPackageVersion = "1.0.0-alpha-20161026-2"; - } -} diff --git a/src/Microsoft.DotNet.ProjectJsonMigration/ConstantPackageNames.cs b/src/Microsoft.DotNet.ProjectJsonMigration/PackageConstants.cs similarity index 56% rename from src/Microsoft.DotNet.ProjectJsonMigration/ConstantPackageNames.cs rename to src/Microsoft.DotNet.ProjectJsonMigration/PackageConstants.cs index 4ccdbc3e6..8df052a58 100644 --- a/src/Microsoft.DotNet.ProjectJsonMigration/ConstantPackageNames.cs +++ b/src/Microsoft.DotNet.ProjectJsonMigration/PackageConstants.cs @@ -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"; } } \ No newline at end of file diff --git a/src/Microsoft.DotNet.ProjectJsonMigration/ProjectTypeDetector.cs b/src/Microsoft.DotNet.ProjectJsonMigration/ProjectExtensions.cs similarity index 77% rename from src/Microsoft.DotNet.ProjectJsonMigration/ProjectTypeDetector.cs rename to src/Microsoft.DotNet.ProjectJsonMigration/ProjectExtensions.cs index f0943bee3..d08310122 100644 --- a/src/Microsoft.DotNet.ProjectJsonMigration/ProjectTypeDetector.cs +++ b/src/Microsoft.DotNet.ProjectJsonMigration/ProjectExtensions.cs @@ -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(project.Dependencies), diff --git a/src/Microsoft.DotNet.ProjectJsonMigration/ProjectType.cs b/src/Microsoft.DotNet.ProjectJsonMigration/ProjectType.cs new file mode 100644 index 000000000..97001ace2 --- /dev/null +++ b/src/Microsoft.DotNet.ProjectJsonMigration/ProjectType.cs @@ -0,0 +1,8 @@ +namespace Microsoft.DotNet.ProjectJsonMigration +{ + internal enum ProjectType + { + Console, + Web + } +} \ No newline at end of file diff --git a/src/Microsoft.DotNet.ProjectJsonMigration/Rules/MigratePackageDependenciesAndToolsRule.cs b/src/Microsoft.DotNet.ProjectJsonMigration/Rules/MigratePackageDependenciesAndToolsRule.cs index 273aa4db4..1e1ec3351 100644 --- a/src/Microsoft.DotNet.ProjectJsonMigration/Rules/MigratePackageDependenciesAndToolsRule.cs +++ b/src/Microsoft.DotNet.ProjectJsonMigration/Rules/MigratePackageDependenciesAndToolsRule.cs @@ -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 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 GetAllProjectReferenceNames(Project project, NuGetFramework framework, ProjectRootElement xproj) + private IEnumerable GetAllProjectReferenceNames( + Project project, + NuGetFramework framework, + ProjectRootElement xproj) { var csprojReferenceItems = _projectDependencyFinder.ResolveXProjProjectDependencies(xproj); var migratedXProjDependencyPaths = csprojReferenceItems.SelectMany(p => p.Includes()); - var migratedXProjDependencyNames = new HashSet(migratedXProjDependencyPaths.Select(p => Path.GetFileNameWithoutExtension( - PathUtility.GetPathWithDirectorySeparator(p)))); + var migratedXProjDependencyNames = + new HashSet(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 FrameworkDependencyTransform => new AddItemTransform( - "Reference", - dep => dep.Name, - dep => "", - dep => true); + private AddItemTransform FrameworkDependencyTransform => + new AddItemTransform( + "Reference", + dep => dep.Name, + dep => "", + dep => true); - private Func> PackageDependencyTransform => () => new AddItemTransform( - "PackageReference", - dep => dep.Name, - dep => "", - dep => true) - .WithMetadata("Version", r => r.LibraryRange.VersionRange.OriginalString); + private Func> PackageDependencyTransform => + () => new AddItemTransform( + "PackageReference", + dep => dep.Name, + dep => "", + dep => true) + .WithMetadata("Version", r => r.LibraryRange.VersionRange.OriginalString); - private AddItemTransform PackageDependencyInfoTransform => new AddItemTransform( - "PackageReference", - dep => dep.Name, - dep => "", - dep => true) - .WithMetadata("Version", r => r.Version) - .WithMetadata("PrivateAssets", r => r.PrivateAssets, r => !string.IsNullOrEmpty(r.PrivateAssets)); + private AddItemTransform PackageDependencyInfoTransform => + new AddItemTransform( + "PackageReference", + dep => dep.Name, + dep => "", + dep => true) + .WithMetadata("Version", r => r.Version) + .WithMetadata("PrivateAssets", r => r.PrivateAssets, r => !string.IsNullOrEmpty(r.PrivateAssets)); - private AddItemTransform ToolTransform => new AddItemTransform( - "DotNetCliToolReference", - dep => dep.Name, - dep => "", - dep => true) - .WithMetadata("Version", r => r.LibraryRange.VersionRange.OriginalString); + private AddItemTransform ToolTransform => + new AddItemTransform( + "DotNetCliToolReference", + dep => dep.Name, + dep => "", + dep => true) + .WithMetadata("Version", r => r.LibraryRange.VersionRange.OriginalString); - private AddPropertyTransform ImportsTransformation => new AddPropertyTransform( - "PackageTargetFallback", - t => $"$(PackageTargetFallback);{string.Join(";", t.Imports)}", - t => t.Imports.OrEmptyIfNull().Any()); + private AddPropertyTransform ImportsTransformation => + new AddPropertyTransform( + "PackageTargetFallback", + t => $"$(PackageTargetFallback);{string.Join(";", t.Imports)}", + t => t.Imports.OrEmptyIfNull().Any()); private class PackageDependencyInfo { diff --git a/src/Microsoft.DotNet.ProjectJsonMigration/Rules/MigrateTFMRule.cs b/src/Microsoft.DotNet.ProjectJsonMigration/Rules/MigrateTFMRule.cs index c173d90f9..f150ccfff 100644 --- a/src/Microsoft.DotNet.ProjectJsonMigration/Rules/MigrateTFMRule.cs +++ b/src/Microsoft.DotNet.ProjectJsonMigration/Rules/MigrateTFMRule.cs @@ -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) diff --git a/src/dotnet/commands/dotnet-migrate/ProjectRootElementExtensions.cs b/src/dotnet/commands/dotnet-migrate/ProjectRootElementExtensions.cs index 262670ad0..c733e0b8b 100644 --- a/src/dotnet/commands/dotnet-migrate/ProjectRootElementExtensions.cs +++ b/src/dotnet/commands/dotnet-migrate/ProjectRootElementExtensions.cs @@ -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; } }