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()
{