From d85bc33ee957837e70b62a1de3c7ecb99ac16c1e Mon Sep 17 00:00:00 2001 From: Ben Villalobos <4691428+BenVillalobos@users.noreply.github.com> Date: Mon, 19 Apr 2021 14:22:40 -0700 Subject: [PATCH 1/8] Stop generating *.runtimeconfig.dev.json This prevents more probing paths being added when not necessary. --- .../targets/Microsoft.NET.Sdk.props | 6 ++++++ .../targets/Microsoft.NET.Sdk.targets | 2 +- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/src/Tasks/Microsoft.NET.Build.Tasks/targets/Microsoft.NET.Sdk.props b/src/Tasks/Microsoft.NET.Build.Tasks/targets/Microsoft.NET.Sdk.props index a9480a836d93..a602088ff2a2 100644 --- a/src/Tasks/Microsoft.NET.Build.Tasks/targets/Microsoft.NET.Sdk.props +++ b/src/Tasks/Microsoft.NET.Build.Tasks/targets/Microsoft.NET.Sdk.props @@ -115,6 +115,12 @@ Copyright (c) .NET Foundation. All rights reserved. $(MSBuildThisFileDirectory)GenerateDeps\GenerateDeps.proj + + + + false + + diff --git a/src/Tasks/Microsoft.NET.Build.Tasks/targets/Microsoft.NET.Sdk.targets b/src/Tasks/Microsoft.NET.Build.Tasks/targets/Microsoft.NET.Sdk.targets index 8cf34c71025e..6ae0c81e01ce 100644 --- a/src/Tasks/Microsoft.NET.Build.Tasks/targets/Microsoft.NET.Sdk.targets +++ b/src/Tasks/Microsoft.NET.Build.Tasks/targets/Microsoft.NET.Sdk.targets @@ -64,7 +64,7 @@ Copyright (c) .NET Foundation. All rights reserved. $(TargetDir)$(ProjectDepsFileName) $(AssemblyName).runtimeconfig.json $(TargetDir)$(ProjectRuntimeConfigFileName) - $(TargetDir)$(AssemblyName).runtimeconfig.dev.json + $(TargetDir)$(AssemblyName).runtimeconfig.dev.json true From 3d6bdaf3dcdc7ae65f9607a15d1151110a7a6793 Mon Sep 17 00:00:00 2001 From: Ben Villalobos <4691428+BenVillalobos@users.noreply.github.com> Date: Tue, 20 Apr 2021 10:35:28 -0700 Subject: [PATCH 2/8] Only skip runtimeconfig.dev.json generation if on net6.0+ --- .../targets/Microsoft.NET.Sdk.props | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/Tasks/Microsoft.NET.Build.Tasks/targets/Microsoft.NET.Sdk.props b/src/Tasks/Microsoft.NET.Build.Tasks/targets/Microsoft.NET.Sdk.props index a602088ff2a2..e9292933666f 100644 --- a/src/Tasks/Microsoft.NET.Build.Tasks/targets/Microsoft.NET.Sdk.props +++ b/src/Tasks/Microsoft.NET.Build.Tasks/targets/Microsoft.NET.Sdk.props @@ -116,9 +116,10 @@ Copyright (c) .NET Foundation. All rights reserved. - + true + - false + false From 26414ea7210c416e68c8467f92d871e511b4e525 Mon Sep 17 00:00:00 2001 From: Ben Villalobos <4691428+BenVillalobos@users.noreply.github.com> Date: Tue, 20 Apr 2021 11:23:13 -0700 Subject: [PATCH 3/8] Fix closing property syntax --- .../Microsoft.NET.Build.Tasks/targets/Microsoft.NET.Sdk.props | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Tasks/Microsoft.NET.Build.Tasks/targets/Microsoft.NET.Sdk.props b/src/Tasks/Microsoft.NET.Build.Tasks/targets/Microsoft.NET.Sdk.props index e9292933666f..152a6504f54e 100644 --- a/src/Tasks/Microsoft.NET.Build.Tasks/targets/Microsoft.NET.Sdk.props +++ b/src/Tasks/Microsoft.NET.Build.Tasks/targets/Microsoft.NET.Sdk.props @@ -119,7 +119,7 @@ Copyright (c) .NET Foundation. All rights reserved. true - false + false From 7b522a2c6490cb248cfb50b7977014276e46f673 Mon Sep 17 00:00:00 2001 From: Ben Villalobos <4691428+BenVillalobos@users.noreply.github.com> Date: Wed, 21 Apr 2021 17:26:07 -0700 Subject: [PATCH 4/8] Version 1 of testing generation of runtimeconfig.dev.json --- .../GivenThatWeWantToBuildANetCoreApp.cs | 31 +++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/src/Tests/Microsoft.NET.Build.Tests/GivenThatWeWantToBuildANetCoreApp.cs b/src/Tests/Microsoft.NET.Build.Tests/GivenThatWeWantToBuildANetCoreApp.cs index 37c7563899b1..f07f769eb5d5 100644 --- a/src/Tests/Microsoft.NET.Build.Tests/GivenThatWeWantToBuildANetCoreApp.cs +++ b/src/Tests/Microsoft.NET.Build.Tests/GivenThatWeWantToBuildANetCoreApp.cs @@ -376,6 +376,37 @@ public static void Main() } + [Theory] + [InlineData("netcoreapp2.0", true)] + [InlineData("netcoreapp3.0", true)] + [InlineData("net5.0", true)] + [InlineData("net6.0", false)] + public void It_stops_generating_runtimeconfig_dev_json_after_net6(string targetFramework, bool generateRuntimeConfigDevJson) + { + TestProject proj = new TestProject() + { + Name = "NetCoreApp", + ProjectSdk = "Microsoft.NET.Sdk", + IsExe = true, + TargetFrameworks = targetFramework, + IsSdkProject = true + }; + + var buildCommand = new BuildCommand(_testAssetsManager.CreateTestProject(proj, identifier: targetFramework)); + + buildCommand.Execute("/bl"); + + var runtimeconfigFile = Path.Combine( + buildCommand.GetOutputDirectory(targetFramework).FullName, + $"{proj.Name}.runtimeconfig.dev.json"); + + buildCommand.GetOutputDirectory(targetFramework) + .GetFiles() + .Any(x => x.Name.Contains("runtimeconfig.dev.json")) + .Should() + .Be(generateRuntimeConfigDevJson); + } + [Theory] [InlineData("netcoreapp2.0")] [InlineData("netcoreapp3.0")] From 914cd2e45483449046fb4dde9a5c9031613f8324 Mon Sep 17 00:00:00 2001 From: Ben Villalobos <4691428+BenVillalobos@users.noreply.github.com> Date: Thu, 22 Apr 2021 16:45:42 -0700 Subject: [PATCH 5/8] Set property to stop generating runtimeconfig.dev.json in M.NET.Sdk.targets --- .../targets/Microsoft.NET.Sdk.props | 7 ------- .../targets/Microsoft.NET.Sdk.targets | 7 +++++++ 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/src/Tasks/Microsoft.NET.Build.Tasks/targets/Microsoft.NET.Sdk.props b/src/Tasks/Microsoft.NET.Build.Tasks/targets/Microsoft.NET.Sdk.props index 152a6504f54e..a9480a836d93 100644 --- a/src/Tasks/Microsoft.NET.Build.Tasks/targets/Microsoft.NET.Sdk.props +++ b/src/Tasks/Microsoft.NET.Build.Tasks/targets/Microsoft.NET.Sdk.props @@ -115,13 +115,6 @@ Copyright (c) .NET Foundation. All rights reserved. $(MSBuildThisFileDirectory)GenerateDeps\GenerateDeps.proj - - true - - - false - - diff --git a/src/Tasks/Microsoft.NET.Build.Tasks/targets/Microsoft.NET.Sdk.targets b/src/Tasks/Microsoft.NET.Build.Tasks/targets/Microsoft.NET.Sdk.targets index 6ae0c81e01ce..0e5c8756aa14 100644 --- a/src/Tasks/Microsoft.NET.Build.Tasks/targets/Microsoft.NET.Sdk.targets +++ b/src/Tasks/Microsoft.NET.Build.Tasks/targets/Microsoft.NET.Sdk.targets @@ -59,6 +59,13 @@ Copyright (c) .NET Foundation. All rights reserved. + + true + + + false + + $(AssemblyName).deps.json $(TargetDir)$(ProjectDepsFileName) From 913ee610050ba01e92d602b536a4f66be3267ae7 Mon Sep 17 00:00:00 2001 From: Ben Villalobos <4691428+BenVillalobos@users.noreply.github.com> Date: Fri, 23 Apr 2021 16:08:53 -0700 Subject: [PATCH 6/8] If user-set GenerateRuntimeConfigDevFile to take priority --- .../Microsoft.NET.Build.Tasks/targets/Microsoft.NET.Sdk.targets | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Tasks/Microsoft.NET.Build.Tasks/targets/Microsoft.NET.Sdk.targets b/src/Tasks/Microsoft.NET.Build.Tasks/targets/Microsoft.NET.Sdk.targets index 0e5c8756aa14..a4fe12f3115f 100644 --- a/src/Tasks/Microsoft.NET.Build.Tasks/targets/Microsoft.NET.Sdk.targets +++ b/src/Tasks/Microsoft.NET.Build.Tasks/targets/Microsoft.NET.Sdk.targets @@ -59,7 +59,7 @@ Copyright (c) .NET Foundation. All rights reserved. - + true From 567a6d61d1c57f65097c643dd7f726f32c66465a Mon Sep 17 00:00:00 2001 From: Ben Villalobos <4691428+BenVillalobos@users.noreply.github.com> Date: Fri, 23 Apr 2021 16:09:07 -0700 Subject: [PATCH 7/8] Add tests for user-set property taking priority --- .../GivenThatWeWantToBuildANetCoreApp.cs | 25 ++++++++++++++----- 1 file changed, 19 insertions(+), 6 deletions(-) diff --git a/src/Tests/Microsoft.NET.Build.Tests/GivenThatWeWantToBuildANetCoreApp.cs b/src/Tests/Microsoft.NET.Build.Tests/GivenThatWeWantToBuildANetCoreApp.cs index f07f769eb5d5..8372cccce452 100644 --- a/src/Tests/Microsoft.NET.Build.Tests/GivenThatWeWantToBuildANetCoreApp.cs +++ b/src/Tests/Microsoft.NET.Build.Tests/GivenThatWeWantToBuildANetCoreApp.cs @@ -377,11 +377,21 @@ public static void Main() } [Theory] - [InlineData("netcoreapp2.0", true)] - [InlineData("netcoreapp3.0", true)] - [InlineData("net5.0", true)] - [InlineData("net6.0", false)] - public void It_stops_generating_runtimeconfig_dev_json_after_net6(string targetFramework, bool generateRuntimeConfigDevJson) + // Default behavior + [InlineData("netcoreapp2.0", "", true)] + [InlineData("netcoreapp3.0", "", true)] + [InlineData("net5.0", "", true)] + [InlineData("net6.0", "", false)] + // Allow property override + [InlineData("netcoreapp2.0", "true", true)] + [InlineData("netcoreapp2.0", "false", false)] + [InlineData("netcoreapp3.0", "true", true)] + [InlineData("netcoreapp3.0", "false", false)] + [InlineData("net5.0", "true", true)] + [InlineData("net5.0", "false", false)] + [InlineData("net6.0", "true", true)] + [InlineData("net6.0", "false", false)] + public void It_stops_generating_runtimeconfig_dev_json_after_net6(string targetFramework, string propertyOverride, bool generateRuntimeConfigDevJson) { TestProject proj = new TestProject() { @@ -392,9 +402,12 @@ public void It_stops_generating_runtimeconfig_dev_json_after_net6(string targetF IsSdkProject = true }; + // User-set property GenerateRuntimeConfigDevFile takes priority. + proj.AdditionalProperties.Add("GenerateRuntimeConfigDevFile", propertyOverride); + var buildCommand = new BuildCommand(_testAssetsManager.CreateTestProject(proj, identifier: targetFramework)); - buildCommand.Execute("/bl"); + buildCommand.Execute(); var runtimeconfigFile = Path.Combine( buildCommand.GetOutputDirectory(targetFramework).FullName, From cb41b9f3ca219f593b85bcb64e8ffba448576fe9 Mon Sep 17 00:00:00 2001 From: Ben Villalobos <4691428+BenVillalobos@users.noreply.github.com> Date: Wed, 28 Apr 2021 14:54:10 -0700 Subject: [PATCH 8/8] Clean up unit tests --- .../GivenThatWeWantToBuildANetCoreApp.cs | 56 +++++++++++-------- 1 file changed, 33 insertions(+), 23 deletions(-) diff --git a/src/Tests/Microsoft.NET.Build.Tests/GivenThatWeWantToBuildANetCoreApp.cs b/src/Tests/Microsoft.NET.Build.Tests/GivenThatWeWantToBuildANetCoreApp.cs index 8372cccce452..15caf025efdd 100644 --- a/src/Tests/Microsoft.NET.Build.Tests/GivenThatWeWantToBuildANetCoreApp.cs +++ b/src/Tests/Microsoft.NET.Build.Tests/GivenThatWeWantToBuildANetCoreApp.cs @@ -377,21 +377,11 @@ public static void Main() } [Theory] - // Default behavior - [InlineData("netcoreapp2.0", "", true)] - [InlineData("netcoreapp3.0", "", true)] - [InlineData("net5.0", "", true)] - [InlineData("net6.0", "", false)] - // Allow property override - [InlineData("netcoreapp2.0", "true", true)] - [InlineData("netcoreapp2.0", "false", false)] - [InlineData("netcoreapp3.0", "true", true)] - [InlineData("netcoreapp3.0", "false", false)] - [InlineData("net5.0", "true", true)] - [InlineData("net5.0", "false", false)] - [InlineData("net6.0", "true", true)] - [InlineData("net6.0", "false", false)] - public void It_stops_generating_runtimeconfig_dev_json_after_net6(string targetFramework, string propertyOverride, bool generateRuntimeConfigDevJson) + [InlineData("netcoreapp2.0", true)] + [InlineData("netcoreapp3.0", true)] + [InlineData("net5.0", true)] + [InlineData("net6.0", false)] + public void It_stops_generating_runtimeconfig_dev_json_after_net6(string targetFramework, bool shouldGenerateRuntimeConfigDevJson) { TestProject proj = new TestProject() { @@ -402,22 +392,42 @@ public void It_stops_generating_runtimeconfig_dev_json_after_net6(string targetF IsSdkProject = true }; - // User-set property GenerateRuntimeConfigDevFile takes priority. - proj.AdditionalProperties.Add("GenerateRuntimeConfigDevFile", propertyOverride); - var buildCommand = new BuildCommand(_testAssetsManager.CreateTestProject(proj, identifier: targetFramework)); + var runtimeconfigFile = Path.Combine( + buildCommand.GetOutputDirectory(targetFramework).FullName, + $"{proj.Name}.runtimeconfig.dev.json"); buildCommand.Execute(); + File.Exists(runtimeconfigFile).Should().Be(shouldGenerateRuntimeConfigDevJson); + } + [Theory] + [InlineData("netcoreapp2.0")] + [InlineData("netcoreapp3.0")] + [InlineData("net5.0")] + [InlineData("net6.0")] + public void It_stops_generating_runtimeconfig_dev_json_after_net6_allow_property_override(string targetFramework) + { + TestProject proj = new TestProject() + { + Name = "NetCoreApp", + ProjectSdk = "Microsoft.NET.Sdk", + IsExe = true, + TargetFrameworks = targetFramework, + IsSdkProject = true + }; + + var buildCommand = new BuildCommand(_testAssetsManager.CreateTestProject(proj, identifier: targetFramework)); var runtimeconfigFile = Path.Combine( buildCommand.GetOutputDirectory(targetFramework).FullName, $"{proj.Name}.runtimeconfig.dev.json"); - buildCommand.GetOutputDirectory(targetFramework) - .GetFiles() - .Any(x => x.Name.Contains("runtimeconfig.dev.json")) - .Should() - .Be(generateRuntimeConfigDevJson); + // GenerateRuntimeConfigDevFile overrides default behavior + buildCommand.Execute("/p:GenerateRuntimeConfigDevFile=true"); + File.Exists(runtimeconfigFile).Should().BeTrue(); + + buildCommand.Execute("/p:GenerateRuntimeConfigDevFile=false"); + File.Exists(runtimeconfigFile).Should().BeFalse(); } [Theory]