From 50c10decf527216b3ba2a4bb60ba9e5df6014e88 Mon Sep 17 00:00:00 2001 From: Justin Goshi Date: Wed, 8 Feb 2017 00:20:04 -0800 Subject: [PATCH 1/3] Migrate compilationOptions --- .../ProjectReader.cs | 40 ++++++++++--------- .../GivenThatIWantToMigrateBuildOptions.cs | 17 ++++++++ 2 files changed, 39 insertions(+), 18 deletions(-) diff --git a/src/Microsoft.DotNet.ProjectJsonMigration/Microsoft.DotNet.Internal.ProjectModel/ProjectReader.cs b/src/Microsoft.DotNet.ProjectJsonMigration/Microsoft.DotNet.Internal.ProjectModel/ProjectReader.cs index 7a2778d9c..298766d64 100644 --- a/src/Microsoft.DotNet.ProjectJsonMigration/Microsoft.DotNet.Internal.ProjectModel/ProjectReader.cs +++ b/src/Microsoft.DotNet.ProjectJsonMigration/Microsoft.DotNet.Internal.ProjectModel/ProjectReader.cs @@ -591,25 +591,10 @@ namespace Microsoft.DotNet.Internal.ProjectModel var rawOptions = rawObject.Value("buildOptions") as JObject; if (rawOptions == null) { - rawOptions = rawObject.Value("compilationOptions") as JObject; - if (rawOptions == null) + return new CommonCompilerOptions { - return new CommonCompilerOptions - { - CompilerName = compilerName ?? "csc" - }; - } - - var lineInfo = (IJsonLineInfo)rawOptions; - - project.Diagnostics.Add( - new DiagnosticMessage( - ErrorCodes.DOTNET1015, - $"The 'compilationOptions' option is deprecated. Use 'buildOptions' instead.", - project.ProjectFilePath, - DiagnosticMessageSeverity.Warning, - lineInfo.LineNumber, - lineInfo.LinePosition)); + CompilerName = compilerName ?? "csc" + }; } var analyzerOptionsJson = rawOptions.Value("analyzerOptions") as JObject; @@ -814,6 +799,9 @@ namespace Microsoft.DotNet.Internal.ProjectModel private static void AddProjectFilesDeprecationDiagnostics(JObject rawProject, Project project) { + var compilationOptionsWarning = "'buildOptions'"; + AddDeprecatedDiagnosticMessage(rawProject, project, "compilationOptions", compilationOptionsWarning); + var compileWarning = "'compile' in 'buildOptions'"; AddDeprecatedDiagnosticMessage(rawProject, project, "compile", compileWarning); AddDeprecatedDiagnosticMessage(rawProject, project, "compileExclude", compileWarning); @@ -870,6 +858,7 @@ namespace Microsoft.DotNet.Internal.ProjectModel private static void ConvertDeprecatedToSupportedFormat(JObject rawProject) { + ConvertToBuildOptions(rawProject); ConvertToBuildOptionsCompile(rawProject); ConvertToBuildOptionsEmbed(rawProject); ConvertToBuildOptionsCopyToOutput(rawProject); @@ -877,6 +866,21 @@ namespace Microsoft.DotNet.Internal.ProjectModel ConvertToPublishOptions(rawProject); } + private static void ConvertToBuildOptions(JObject rawProject) + { + var jpath = "buildOptions"; + if (AreDeprecatedOptionsIgnored(rawProject, jpath)) + { + return; + } + + var deprecatedValue = rawProject.Value("compilationOptions"); + if (deprecatedValue != null) + { + rawProject["buildOptions"] = deprecatedValue.DeepClone(); + } + } + private static void ConvertToBuildOptionsCompile(JObject rawProject) { var jpath = "buildOptions.compile"; diff --git a/test/Microsoft.DotNet.ProjectJsonMigration.Tests/Rules/GivenThatIWantToMigrateBuildOptions.cs b/test/Microsoft.DotNet.ProjectJsonMigration.Tests/Rules/GivenThatIWantToMigrateBuildOptions.cs index 03405bb14..ef8105572 100644 --- a/test/Microsoft.DotNet.ProjectJsonMigration.Tests/Rules/GivenThatIWantToMigrateBuildOptions.cs +++ b/test/Microsoft.DotNet.ProjectJsonMigration.Tests/Rules/GivenThatIWantToMigrateBuildOptions.cs @@ -16,6 +16,23 @@ namespace Microsoft.DotNet.ProjectJsonMigration.Tests { public class GivenThatIWantToMigrateBuildOptions : TestBase { + [Fact] + public void MigratingDeprecatedCompilationOptionsWithEmitEntryPointPopulatesOutputTypeField() + { + var mockProj = RunBuildOptionsRuleOnPj(@" + { + ""compilationOptions"": { + ""emitEntryPoint"": ""true"" + }, + ""exclude"": [ + ""node_modules"" + ] + }"); + + mockProj.Properties.Count(p => p.Name == "OutputType").Should().Be(1); + mockProj.Properties.First(p => p.Name == "OutputType").Value.Should().Be("Exe"); + } + [Fact] public void SpecifiedDefaultPropertiesAreRemovedWhenTheyExistInTheCsprojTemplate() { From 6d492a9ab1fc94b03490e631ea2c31d76f6b659f Mon Sep 17 00:00:00 2001 From: Rohit Agrawal Date: Wed, 8 Feb 2017 08:25:30 -0800 Subject: [PATCH 2/3] Update Microsoft.DotNet.Cli.DependencyVersions.props --- build/Microsoft.DotNet.Cli.DependencyVersions.props | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/build/Microsoft.DotNet.Cli.DependencyVersions.props b/build/Microsoft.DotNet.Cli.DependencyVersions.props index ead05d75c..a248cfe73 100644 --- a/build/Microsoft.DotNet.Cli.DependencyVersions.props +++ b/build/Microsoft.DotNet.Cli.DependencyVersions.props @@ -3,8 +3,8 @@ 15.1.0-preview-000545-01 2.0.0-rc4-61325-08 - 1.0.0-alpha-20170205-2 - 4.0.0-rtm-2265 + 1.0.0-alpha-20170207-4 + 4.0.0-rtm-2275 1.0.0-alpha-20170130-3-281 15.0.0-preview-20170125-04 1.0.0-beta1-20170202-111 From 5e3f36833824cec59a0a72fb83efaafb419f058c Mon Sep 17 00:00:00 2001 From: Justin Goshi Date: Wed, 8 Feb 2017 14:26:14 -0800 Subject: [PATCH 3/3] Update the test --- .../Rules/GivenThatIWantToMigrateBuildOptions.cs | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/test/Microsoft.DotNet.ProjectJsonMigration.Tests/Rules/GivenThatIWantToMigrateBuildOptions.cs b/test/Microsoft.DotNet.ProjectJsonMigration.Tests/Rules/GivenThatIWantToMigrateBuildOptions.cs index ef8105572..e4f24c6ac 100644 --- a/test/Microsoft.DotNet.ProjectJsonMigration.Tests/Rules/GivenThatIWantToMigrateBuildOptions.cs +++ b/test/Microsoft.DotNet.ProjectJsonMigration.Tests/Rules/GivenThatIWantToMigrateBuildOptions.cs @@ -31,6 +31,20 @@ namespace Microsoft.DotNet.ProjectJsonMigration.Tests mockProj.Properties.Count(p => p.Name == "OutputType").Should().Be(1); mockProj.Properties.First(p => p.Name == "OutputType").Value.Should().Be("Exe"); + + mockProj.Items.Count(i => i.ItemType.Equals("Compile", StringComparison.Ordinal)) + .Should().Be(1); + mockProj.Items.Count(i => + i.ItemType.Equals("Compile", StringComparison.Ordinal) && + i.Remove.Equals("node_modules")) + .Should().Be(1); + + mockProj.Items.Count(i => i.ItemType.Equals("EmbeddedResource", StringComparison.Ordinal)) + .Should().Be(1); + mockProj.Items.Count(i => + i.ItemType.Equals("EmbeddedResource", StringComparison.Ordinal) && + i.Remove.Equals("node_modules")) + .Should().Be(1); } [Fact]