diff --git a/src/Microsoft.DotNet.ProjectJsonMigration/Rules/MigratePackageDependenciesAndToolsRule.cs b/src/Microsoft.DotNet.ProjectJsonMigration/Rules/MigratePackageDependenciesAndToolsRule.cs index d13f56ec1..cff6fc91a 100644 --- a/src/Microsoft.DotNet.ProjectJsonMigration/Rules/MigratePackageDependenciesAndToolsRule.cs +++ b/src/Microsoft.DotNet.ProjectJsonMigration/Rules/MigratePackageDependenciesAndToolsRule.cs @@ -59,8 +59,11 @@ namespace Microsoft.DotNet.ProjectJsonMigration.Rules foreach (var targetFramework in targetFrameworks) { MigrationTrace.Instance.WriteLine(String.Format(LocalizableStrings.MigratingFramework, targetFramework.FrameworkName.GetShortFolderName())); - - MigrateImports(migrationRuleInputs.CommonPropertyGroup, targetFramework); + + MigrateImports( + migrationRuleInputs.CommonPropertyGroup, + targetFramework, + migrationRuleInputs.ProjectContexts.Count() > 1); MigrateDependencies( project, @@ -161,13 +164,14 @@ namespace Microsoft.DotNet.ProjectJsonMigration.Rules private void MigrateImports( ProjectPropertyGroupElement commonPropertyGroup, - TargetFrameworkInformation targetFramework) + TargetFrameworkInformation targetFramework, + bool isMultiTFM) { var transform = ImportsTransformation.Transform(targetFramework); if (transform != null) { - transform.Condition = targetFramework.FrameworkName.GetMSBuildCondition(); + transform.Condition = isMultiTFM ? targetFramework.FrameworkName.GetMSBuildCondition() : null; _transformApplicator.Execute(transform, commonPropertyGroup, mergeExisting: true); } else diff --git a/test/Microsoft.DotNet.ProjectJsonMigration.Tests/Rules/GivenThatIWantToMigratePackageDependencies.cs b/test/Microsoft.DotNet.ProjectJsonMigration.Tests/Rules/GivenThatIWantToMigratePackageDependencies.cs index dcffe1214..722cd7e14 100644 --- a/test/Microsoft.DotNet.ProjectJsonMigration.Tests/Rules/GivenThatIWantToMigratePackageDependencies.cs +++ b/test/Microsoft.DotNet.ProjectJsonMigration.Tests/Rules/GivenThatIWantToMigratePackageDependencies.cs @@ -15,7 +15,7 @@ namespace Microsoft.DotNet.ProjectJsonMigration.Tests public class GivenThatIWantToMigratePackageDependencies : PackageDependenciesTestBase { [Fact] - public void It_migrates_basic_PackageReference() + public void ItMigratesBasicPackageReference() { var mockProj = RunPackageDependenciesRuleOnPj(@" { @@ -29,7 +29,7 @@ namespace Microsoft.DotNet.ProjectJsonMigration.Tests } [Fact] - public void It_migrates_type_build_to_PrivateAssets() + public void ItMigratesTypeBuildToPrivateAssets() { var mockProj = RunPackageDependenciesRuleOnPj(@" { @@ -50,7 +50,7 @@ namespace Microsoft.DotNet.ProjectJsonMigration.Tests } [Fact] - public void It_migrates_suppress_parent_array_to_PrivateAssets() + public void ItMigratesSuppressParentArrayToPrivateAssets() { var mockProj = RunPackageDependenciesRuleOnPj(@" { @@ -69,7 +69,7 @@ namespace Microsoft.DotNet.ProjectJsonMigration.Tests } [Fact] - public void It_migrates_suppress_parent_string_to_PrivateAssets() + public void ItMigratesSuppressParentStringToPrivateAssets() { var mockProj = RunPackageDependenciesRuleOnPj(@" { @@ -88,7 +88,7 @@ namespace Microsoft.DotNet.ProjectJsonMigration.Tests } [Fact] - public void It_migrates_include_exclude_arrays_to_IncludeAssets() + public void ItMigratesIncludeExcludeArraysToIncludeAssets() { var mockProj = RunPackageDependenciesRuleOnPj(@" { @@ -108,7 +108,7 @@ namespace Microsoft.DotNet.ProjectJsonMigration.Tests } [Fact] - public void It_migrates_include_string_to_IncludeAssets() + public void ItMigratesIncludeStringToIncludeAssets() { var mockProj = RunPackageDependenciesRuleOnPj(@" { @@ -128,7 +128,7 @@ namespace Microsoft.DotNet.ProjectJsonMigration.Tests } [Fact] - public void It_migrates_include_exclude_overlapping_strings_to_IncludeAssets() + public void ItMigratesIncludeExcludeOverlappingStringsToIncludeAssets() { var mockProj = RunPackageDependenciesRuleOnPj(@" { @@ -149,7 +149,7 @@ namespace Microsoft.DotNet.ProjectJsonMigration.Tests [Fact] - public void It_migrates_Tools() + public void ItMigratesTools() { var mockProj = RunPackageDependenciesRuleOnPj(@" { @@ -163,7 +163,7 @@ namespace Microsoft.DotNet.ProjectJsonMigration.Tests } [Fact] - public void It_migrates_imports_per_framework() + public void ItMigratesImportsPerFramework() { var importPropertyName = "PackageTargetFallback"; @@ -201,7 +201,27 @@ namespace Microsoft.DotNet.ProjectJsonMigration.Tests } [Fact] - public void It_auto_add_desktop_references_during_migrate() + public void ItDoesNotConditionToPackageTargetFallBackWhenMigratingASingleTFM() + { + var importPropertyName = "PackageTargetFallback"; + + var mockProj = RunPackageDependenciesRuleOnPj(@" + { + ""frameworks"": { + ""netcoreapp1.0"" : { + ""imports"": [""netstandard1.3"", ""net451""] + } + } + }"); + + var imports = mockProj.Properties.Where(p => p.Name == importPropertyName); + imports.Should().HaveCount(1); + + imports.Single().Condition.Should().BeEmpty(); + } + + [Fact] + public void ItAutoAddDesktopReferencesDuringMigrate() { var mockProj = RunPackageDependenciesRuleOnPj(@" { @@ -234,7 +254,7 @@ namespace Microsoft.DotNet.ProjectJsonMigration.Tests } [Fact] - public void It_migrates_test_projects_to_have_test_sdk() + public void ItMigratesTestProjectsToHaveTestSdk() { var mockProj = RunPackageDependenciesRuleOnPj(@" { @@ -267,7 +287,7 @@ namespace Microsoft.DotNet.ProjectJsonMigration.Tests } [Fact] - public void It_migrates_test_projects_to_have_test_sdk_and_xunit_packagedependencies() + public void ItMigratesTestProjectsToHaveTestSdkAndXunitPackagedependencies() { var mockProj = RunPackageDependenciesRuleOnPj(@" { @@ -306,7 +326,7 @@ namespace Microsoft.DotNet.ProjectJsonMigration.Tests } [Fact] - public void It_migrates_test_projects_to_have_test_sdk_and_xunit_packagedependencies_overwrite_existing_packagedependencies() + public void ItMigratesTestProjectsToHaveTestSdkAndXunitPackagedependenciesOverwriteExistingPackagedependencies() { var mockProj = RunPackageDependenciesRuleOnPj(@" { @@ -348,7 +368,7 @@ namespace Microsoft.DotNet.ProjectJsonMigration.Tests } [Fact] - public void It_migrates_test_projects_to_have_test_sdk_and_mstest_packagedependencies() + public void ItMigratesTestProjectsToHaveTestSdkAndMstestPackagedependencies() { var mockProj = RunPackageDependenciesRuleOnPj(@" { @@ -408,7 +428,7 @@ namespace Microsoft.DotNet.ProjectJsonMigration.Tests } } }")] - public void It_migrates_library_and_does_not_double_netstandard_ref(string pjContent) + public void ItMigratesLibraryAndDoesNotDoubleNetstandardRef(string pjContent) { var mockProj = RunPackageDependenciesRuleOnPj(pjContent); diff --git a/test/Microsoft.DotNet.ProjectJsonMigration.Tests/TemporaryProjectFileRuleRunner.cs b/test/Microsoft.DotNet.ProjectJsonMigration.Tests/TemporaryProjectFileRuleRunner.cs index f223ffe68..f574e26a6 100644 --- a/test/Microsoft.DotNet.ProjectJsonMigration.Tests/TemporaryProjectFileRuleRunner.cs +++ b/test/Microsoft.DotNet.ProjectJsonMigration.Tests/TemporaryProjectFileRuleRunner.cs @@ -1,4 +1,5 @@ using System.Collections.Generic; +using System.Linq; using Microsoft.Build.Construction; using Microsoft.DotNet.ProjectJsonMigration.Rules; using Microsoft.DotNet.Internal.ProjectModel; @@ -8,28 +9,48 @@ namespace Microsoft.DotNet.ProjectJsonMigration.Tests { internal class TemporaryProjectFileRuleRunner { - public static ProjectRootElement RunRules(IEnumerable rules, string projectJson, - string testDirectory, ProjectRootElement xproj=null) + public static ProjectRootElement RunRules( + IEnumerable rules, + string projectJson, + string testDirectory, + ProjectRootElement xproj=null) { - var projectContext = GenerateProjectContextFromString(testDirectory, projectJson); - return RunMigrationRulesOnGeneratedProject(rules, projectContext, testDirectory, xproj); + var projectContexts = GenerateProjectContextsFromString(testDirectory, projectJson); + return RunMigrationRulesOnGeneratedProject(rules, projectContexts, testDirectory, xproj); } - private static ProjectContext GenerateProjectContextFromString(string projectDirectory, string json) + private static IEnumerable GenerateProjectContextsFromString( + string projectDirectory, + string json) { var testPj = new ProjectJsonBuilder(null) .FromStringBase(json) .SaveToDisk(projectDirectory); - return ProjectContext.Create(testPj, FrameworkConstants.CommonFrameworks.NetCoreApp10); + var projectContexts = ProjectContext.CreateContextForEachFramework(projectDirectory); + + if (projectContexts.Count() == 0) + { + projectContexts = new [] + { + ProjectContext.Create(testPj, FrameworkConstants.CommonFrameworks.NetCoreApp10) + }; + } + + return projectContexts; } - private static ProjectRootElement RunMigrationRulesOnGeneratedProject(IEnumerable rules, - ProjectContext projectContext, string testDirectory, ProjectRootElement xproj) + private static ProjectRootElement RunMigrationRulesOnGeneratedProject( + IEnumerable rules, + IEnumerable projectContexts, + string testDirectory, + ProjectRootElement xproj) { var project = ProjectRootElement.Create(); var testSettings = MigrationSettings.CreateMigrationSettingsTestHook(testDirectory, testDirectory, project); - var testInputs = new MigrationRuleInputs(new[] {projectContext}, project, + var testInputs = new MigrationRuleInputs( + projectContexts, + project, project.AddItemGroup(), project.AddPropertyGroup(), xproj);