diff --git a/src/Tasks/Microsoft.NET.Build.Tasks/targets/Microsoft.NET.TargetFrameworkInference.targets b/src/Tasks/Microsoft.NET.Build.Tasks/targets/Microsoft.NET.TargetFrameworkInference.targets index a00804849e05..cbacddc088d0 100644 --- a/src/Tasks/Microsoft.NET.Build.Tasks/targets/Microsoft.NET.TargetFrameworkInference.targets +++ b/src/Tasks/Microsoft.NET.Build.Tasks/targets/Microsoft.NET.TargetFrameworkInference.targets @@ -52,20 +52,17 @@ Copyright (c) .NET Foundation. All rights reserved. $([MSBuild]::GetTargetFrameworkIdentifier('$(TargetFramework)')) - v$([MSBuild]::GetTargetFrameworkVersion('$(TargetFramework)', 3)) - <_TargetFrameworkVersionLength Condition="$(TargetFrameworkVersion.EndsWith('.0'))" >$([MSBuild]::Subtract($(TargetFrameworkVersion.Length), 2)) - $(TargetFrameworkVersion.Substring(0, $(_TargetFrameworkVersionLength))) + v$([MSBuild]::GetTargetFrameworkVersion('$(TargetFramework)', 2)) - - $([MSBuild]::GetTargetPlatformIdentifier('$(TargetFramework)')) - $([MSBuild]::GetTargetPlatformVersion('$(TargetFramework)', 3)) - - <_TargetPlatformVersionLength Condition="$(TargetPlatformVersion.EndsWith('.0'))" >$([MSBuild]::Subtract($(TargetPlatformVersion.Length), 2)) - $(TargetPlatformVersion.Substring(0, $(_TargetPlatformVersionLength))) + + $([MSBuild]::GetTargetPlatformIdentifier('$(TargetFramework)')) + $([MSBuild]::GetTargetPlatformVersion('$(TargetFramework)', 4)) + $([MSBuild]::GetTargetPlatformVersion('$(TargetFramework)', 2)) + Windows diff --git a/src/Tasks/Microsoft.NET.Build.Tasks/targets/Microsoft.NET.WindowsSdkSupportedTargetPlatforms.props b/src/Tasks/Microsoft.NET.Build.Tasks/targets/Microsoft.NET.WindowsSdkSupportedTargetPlatforms.props index b27e16caff12..5041005639a4 100644 --- a/src/Tasks/Microsoft.NET.Build.Tasks/targets/Microsoft.NET.WindowsSdkSupportedTargetPlatforms.props +++ b/src/Tasks/Microsoft.NET.Build.Tasks/targets/Microsoft.NET.WindowsSdkSupportedTargetPlatforms.props @@ -13,9 +13,9 @@ Copyright (c) .NET Foundation. All rights reserved. - - - + + + diff --git a/src/Tests/Microsoft.NET.Build.Tests/GivenThatWeWantToBuildALibrary.cs b/src/Tests/Microsoft.NET.Build.Tests/GivenThatWeWantToBuildALibrary.cs index 0a63fa9c611f..7023057847b6 100644 --- a/src/Tests/Microsoft.NET.Build.Tests/GivenThatWeWantToBuildALibrary.cs +++ b/src/Tests/Microsoft.NET.Build.Tests/GivenThatWeWantToBuildALibrary.cs @@ -454,7 +454,7 @@ public void It_implicitly_defines_compilation_constants_for_the_target_platform( [Theory] [InlineData(new[] { "1.0", "1.1" }, "ios", "1.1", new[] { "IOS", "IOS1_1", "IOS1_0" })] [InlineData(new[] { "11.11", "12.12", "13.13" }, "android", "12.12", new[] { "ANDROID", "ANDROID11_11", "ANDROID12_12" })] - [InlineData(new string[] { /* Use the built in SdkSupportedTargetPlatform items */}, "windows", "10.0.19041", new[] { "WINDOWS", "WINDOWS7_0", "WINDOWS8_0", "WINDOWS10_0_17763", "WINDOWS10_0_18362", "WINDOWS10_0_19041" })] + [InlineData(new string[] { /* Use the built in SdkSupportedTargetPlatform items */}, "windows", "10.0.19041.0", new[] { "WINDOWS", "WINDOWS7_0", "WINDOWS8_0", "WINDOWS10_0_17763_0", "WINDOWS10_0_18362_0", "WINDOWS10_0_19041_0" })] public void It_implicitly_defines_compilation_constants_for_the_target_platform_with_backwards_compatibility(string[] sdkSupportedTargetPlatform, string targetPlatformIdentifier, string targetPlatformVersion, string[] expectedDefines) { var targetFramework = "net5.0"; diff --git a/src/Tests/Microsoft.NET.Build.Tests/GivenThatWeWantToBuildAWindowsDesktopProject.cs b/src/Tests/Microsoft.NET.Build.Tests/GivenThatWeWantToBuildAWindowsDesktopProject.cs index ab364978b385..f2b1c304d1b9 100644 --- a/src/Tests/Microsoft.NET.Build.Tests/GivenThatWeWantToBuildAWindowsDesktopProject.cs +++ b/src/Tests/Microsoft.NET.Build.Tests/GivenThatWeWantToBuildAWindowsDesktopProject.cs @@ -122,17 +122,22 @@ public void It_fails_if_windows_target_platform_version_is_invalid() .HaveStdOutContaining("NETSDK1140"); } - [WindowsOnlyFact] - public void It_succeeds_if_windows_target_platform_version_has_trailing_zeros() + [WindowsOnlyTheory] + [InlineData(true)] + [InlineData(false)] + public void It_succeeds_if_windows_target_platform_version_does_not_have_trailing_zeros(bool setInTargetframework) { var testProject = new TestProject() { Name = "ValidWindowsVersion", IsSdkProject = true, - TargetFrameworks = "net5.0" + TargetFrameworks = setInTargetframework ? "net5.0-windows10.0.18362" : "net5.0" }; - testProject.AdditionalProperties["TargetPlatformIdentifier"] = "Windows"; - testProject.AdditionalProperties["TargetPlatformVersion"] = "10.0.18362.0"; // We must set this manually because if we set it in the TFM we remove the trailing zeroes. + if (!setInTargetframework) + { + testProject.AdditionalProperties["TargetPlatformIdentifier"] = "Windows"; + testProject.AdditionalProperties["TargetPlatformVersion"] = "10.0.18362"; + } var testAsset = _testAssetsManager.CreateTestProject(testProject); var buildCommand = new BuildCommand(testAsset); @@ -144,7 +149,7 @@ public void It_succeeds_if_windows_target_platform_version_has_trailing_zeros() getValuesCommand.Execute() .Should() .Pass(); - getValuesCommand.GetValues().Should().BeEquivalentTo(new[] { "10.0.18362" }); + getValuesCommand.GetValues().Should().BeEquivalentTo(new[] { "10.0.18362.0" }); } [Fact] diff --git a/src/Tests/Microsoft.NET.Build.Tests/GivenThatWeWantToBuildWithATargetPlatform.cs b/src/Tests/Microsoft.NET.Build.Tests/GivenThatWeWantToBuildWithATargetPlatform.cs index a4144f548dab..33a7e20f0d54 100644 --- a/src/Tests/Microsoft.NET.Build.Tests/GivenThatWeWantToBuildWithATargetPlatform.cs +++ b/src/Tests/Microsoft.NET.Build.Tests/GivenThatWeWantToBuildWithATargetPlatform.cs @@ -25,7 +25,7 @@ public GivenThatWeWantToBuildWithATargetPlatform(ITestOutputHelper log) : base(l [InlineData("net5.0-Windows7.0", ".NETCoreApp", "v5.0", "Windows", "7.0")] [InlineData("net5.0-WINDOWS7.0", ".NETCoreApp", "v5.0", "Windows", "7.0")] [InlineData("net5.0-windows", ".NETCoreApp", "v5.0", "Windows", "7.0")] - [InlineData("net5.0-windows10.0.19041", ".NETCoreApp", "v5.0", "Windows", "10.0.19041")] + [InlineData("net5.0-windows10.0.19041.0", ".NETCoreApp", "v5.0", "Windows", "10.0.19041.0")] public void It_defines_target_platform_from_target_framework(string targetFramework, string expectedTargetFrameworkIdentifier, string expectedTargetFrameworkVersion, string expectedTargetPlatformIdentifier, string expectedTargetPlatformVersion) { var testProj = new TestProject() @@ -63,6 +63,28 @@ public void It_defines_target_platform_from_target_framework(string targetFramew assertValue("TargetPlatformDisplayName", $"{expectedTargetPlatformIdentifier} {expectedTargetPlatformVersion}"); } + [WindowsOnlyRequiresMSBuildVersionFact("16.8.0.41402")] + public void It_defines_target_platform_from_target_framework_with_explicit_version() + { + var targetPlatformVersion = "10.0.19041.0"; + var targetFramework = "net5.0-windows"; + var testProj = new TestProject() + { + Name = "TargetPlatformTests", + IsSdkProject = true, + TargetFrameworks = targetFramework + }; + testProj.AdditionalProperties["TargetPlatformVersion"] = targetPlatformVersion; + var testAsset = _testAssetsManager.CreateTestProject(testProj); + + var getValuesCommand = new GetValuesCommand(Log, Path.Combine(testAsset.Path, testProj.Name), targetFramework, "TargetPlatformIdentifier"); + getValuesCommand + .Execute() + .Should() + .Pass(); + getValuesCommand.GetValues().ShouldBeEquivalentTo(new[] { "Windows" }); + } + [Fact] public void It_fails_on_unsupported_os() {