diff options
author | Ian Toal <iantoal@microsoft.com> | 2019-09-17 22:38:19 +0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-09-17 22:38:19 +0300 |
commit | baba2fc9a7ff402b8193c42696d1ecb38fcfd7e6 (patch) | |
tree | 31f152fef30f24a4b8ae77515ad9bab1d782069a /main | |
parent | 9033e0ae39685a42742b18b4dc3e5269e9f8ee1b (diff) |
Filter DotNetCore TargetFramework list selection to only include those with supported Sdks (#8740)
* Filter DotNetCore TargetFramework list selection to only include those with supported Sdks
Fixes: https://devdiv.visualstudio.com/DevDiv/_workitems/edit/983548
* Fix failures in DotNetCoreProjectTemplateWizardTests caused by newly introduced logic to match Runtime version to corresponding Sdk version.
Backed off the strict runtime filtering logic to only apply to supported SDK/Runtime versions (2.1 and above).
Updated the tests to explicitly set the Sdk version and ensured that the Runtime and Version pairs matched actual shipped versions.
Diffstat (limited to 'main')
4 files changed, 75 insertions, 11 deletions
diff --git a/main/src/addins/MonoDevelop.DotNetCore/MonoDevelop.DotNetCore.Templating/DotNetCoreProjectTemplateWizard.cs b/main/src/addins/MonoDevelop.DotNetCore/MonoDevelop.DotNetCore.Templating/DotNetCoreProjectTemplateWizard.cs index 0ffb098bd9..f89d775186 100644 --- a/main/src/addins/MonoDevelop.DotNetCore/MonoDevelop.DotNetCore.Templating/DotNetCoreProjectTemplateWizard.cs +++ b/main/src/addins/MonoDevelop.DotNetCore/MonoDevelop.DotNetCore.Templating/DotNetCoreProjectTemplateWizard.cs @@ -84,7 +84,7 @@ namespace MonoDevelop.DotNetCore.Templating RemoveUnsupportedNetStandardTargetFrameworksForFSharp (targetFrameworks); } } else { - targetFrameworks = DotNetCoreProjectSupportedTargetFrameworks.GetNetCoreAppTargetFrameworks ().ToList (); + targetFrameworks = DotNetCoreProjectSupportedTargetFrameworks.GetNetCoreAppTargetFrameworksWithSdkSupport ().ToList (); if (!SupportsNetCore1x ()) { RemoveUnsupportedNetCoreApp1xTargetFrameworks (targetFrameworks); @@ -123,7 +123,7 @@ namespace MonoDevelop.DotNetCore.Templating Parameters [parameter] = "true"; } else { if (!SupportsNetCore1x ()) { - var highestFramework = DotNetCoreProjectSupportedTargetFrameworks.GetNetCoreAppTargetFrameworks ().FirstOrDefault (); + var highestFramework = DotNetCoreProjectSupportedTargetFrameworks.GetNetCoreAppTargetFrameworksWithSdkSupport ().FirstOrDefault (); if (highestFramework != null && highestFramework.IsNetCoreAppOrHigher (DotNetCoreVersion.Parse ("2.0"))) { var parameter = highestFramework.GetParameterName (); if (!string.IsNullOrEmpty (parameter)) @@ -132,7 +132,7 @@ namespace MonoDevelop.DotNetCore.Templating Parameters [defaultParameterNetCore20] = "true"; } } else { - var highestFramework = DotNetCoreProjectSupportedTargetFrameworks.GetNetCoreAppTargetFrameworks ().FirstOrDefault (); + var highestFramework = DotNetCoreProjectSupportedTargetFrameworks.GetNetCoreAppTargetFrameworksWithSdkSupport ().FirstOrDefault (); if (highestFramework != null) { var parameter = highestFramework.GetParameterName (); if (!string.IsNullOrEmpty (parameter)) @@ -154,7 +154,7 @@ namespace MonoDevelop.DotNetCore.Templating if (!IsSupportedParameter ("NetCoreLibrary")) return; - var highestFramework = DotNetCoreProjectSupportedTargetFrameworks.GetNetCoreAppTargetFrameworks ().FirstOrDefault (); + var highestFramework = DotNetCoreProjectSupportedTargetFrameworks.GetNetCoreAppTargetFrameworksWithSdkSupport ().FirstOrDefault (); if (highestFramework != null) { Parameters ["framework"] = highestFramework.Id.ShortName; } else { diff --git a/main/src/addins/MonoDevelop.DotNetCore/MonoDevelop.DotNetCore.Tests/MonoDevelop.DotNetCore.Tests/DotNetCoreProjectSupportedTargetFrameworksTests.cs b/main/src/addins/MonoDevelop.DotNetCore/MonoDevelop.DotNetCore.Tests/MonoDevelop.DotNetCore.Tests/DotNetCoreProjectSupportedTargetFrameworksTests.cs index abde687122..e7ddbed3a3 100644 --- a/main/src/addins/MonoDevelop.DotNetCore/MonoDevelop.DotNetCore.Tests/MonoDevelop.DotNetCore.Tests/DotNetCoreProjectSupportedTargetFrameworksTests.cs +++ b/main/src/addins/MonoDevelop.DotNetCore/MonoDevelop.DotNetCore.Tests/MonoDevelop.DotNetCore.Tests/DotNetCoreProjectSupportedTargetFrameworksTests.cs @@ -114,5 +114,40 @@ namespace MonoDevelop.DotNetCore.Tests Assert.AreEqual (".NETCoreApp,Version=v2.1", frameworks [0].Id.ToString ()); Assert.AreEqual (1, frameworks.Count); } + + [Test] + public void GetNetCoreAppTargetFrameworksWithSdkSupport_NetCore30RuntimeInstalled_NoSdkInstalled () + { + DotNetCoreRuntimesInstalled ("3.0.0-preview-27324-5"); + DotNetCoreSdksNotInstalled (); + + var frameworks = DotNetCoreProjectSupportedTargetFrameworks.GetNetCoreAppTargetFrameworksWithSdkSupport ().ToList (); + + Assert.AreEqual (0, frameworks.Count); + } + + [Test] + public void GetNetCoreAppTargetFrameworksWithSdkSupport_NetCore30And22RuntimeInstalled_30SdkInstalled () + { + DotNetCoreRuntimesInstalled ("3.0.0-preview-27324-5", "2.2.7"); + DotNetCoreSdksInstalled ("3.0.0-preview-27324-5"); + + var frameworks = DotNetCoreProjectSupportedTargetFrameworks.GetNetCoreAppTargetFrameworksWithSdkSupport ().ToList (); + + Assert.AreEqual (".NETCoreApp,Version=v3.0", frameworks [0].Id.ToString ()); + Assert.AreEqual (1, frameworks.Count); + } + + [Test] + public void GetNetCoreAppTargetFrameworksWithSdkSupport_NetCore30And22RuntimeInstalled_22SdkInstalled () + { + DotNetCoreRuntimesInstalled ("3.0.0-preview-27324-5", "2.2.7"); + DotNetCoreSdksInstalled ("2.2.401"); + + var frameworks = DotNetCoreProjectSupportedTargetFrameworks.GetNetCoreAppTargetFrameworksWithSdkSupport ().ToList (); + + Assert.AreEqual (".NETCoreApp,Version=v2.2", frameworks [0].Id.ToString ()); + Assert.AreEqual (1, frameworks.Count); + } } } diff --git a/main/src/addins/MonoDevelop.DotNetCore/MonoDevelop.DotNetCore.Tests/MonoDevelop.DotNetCore.Tests/DotNetCoreProjectTemplateWizardTests.cs b/main/src/addins/MonoDevelop.DotNetCore/MonoDevelop.DotNetCore.Tests/MonoDevelop.DotNetCore.Tests/DotNetCoreProjectTemplateWizardTests.cs index 7657434a34..b74da57284 100644 --- a/main/src/addins/MonoDevelop.DotNetCore/MonoDevelop.DotNetCore.Tests/MonoDevelop.DotNetCore.Tests/DotNetCoreProjectTemplateWizardTests.cs +++ b/main/src/addins/MonoDevelop.DotNetCore/MonoDevelop.DotNetCore.Tests/MonoDevelop.DotNetCore.Tests/DotNetCoreProjectTemplateWizardTests.cs @@ -176,7 +176,8 @@ namespace MonoDevelop.DotNetCore.Tests public void NetCoreApp_NetCore20Installed () { CreateWizard (); - DotNetCoreRuntimesInstalled ("2.0.1"); + DotNetCoreRuntimesInstalled ("2.0.3"); + DotNetCoreSdksInstalled ("2.1.2"); int pages = wizard.TotalPages; @@ -194,7 +195,8 @@ namespace MonoDevelop.DotNetCore.Tests public void NetCoreApp_NetCore11Installed () { CreateWizard (); - DotNetCoreRuntimesInstalled ("1.1.0"); + DotNetCoreRuntimesInstalled ("1.1.1"); + DotNetCoreSdksInstalled ("1.0.1"); int pages = wizard.TotalPages; @@ -219,7 +221,8 @@ namespace MonoDevelop.DotNetCore.Tests public void NetCoreApp_NetCore20AndNetCore1xInstalled () { CreateWizard (); - DotNetCoreRuntimesInstalled ("2.0.1", "1.1.0", "1.0.2"); + DotNetCoreRuntimesInstalled ("2.0.3", "1.1.2", "1.0.4"); + DotNetCoreSdksInstalled ("2.1.2", "1.0.4", "1.0.1"); int pages = wizard.TotalPages; @@ -276,6 +279,7 @@ namespace MonoDevelop.DotNetCore.Tests CreateWizard (); AddSupportedParameters (supportedParameters); DotNetCoreRuntimesInstalled ("1.1.2"); + DotNetCoreSdksInstalled ("1.0.4"); int pages = wizard.TotalPages; @@ -296,6 +300,7 @@ namespace MonoDevelop.DotNetCore.Tests CreateWizard (); AddSupportedParameters (supportedParameters); DotNetCoreRuntimesInstalled ("2.0.5", "1.1.2"); + DotNetCoreSdksInstalled ("2.1.4", "1.0.4"); int pages = wizard.TotalPages; @@ -321,7 +326,8 @@ namespace MonoDevelop.DotNetCore.Tests { CreateWizard (); AddSupportedParameters ("NetCoreLibrary"); - DotNetCoreRuntimesInstalled ("2.0.1"); + DotNetCoreRuntimesInstalled ("2.0.3"); + DotNetCoreSdksInstalled ("2.0.3"); int pages = wizard.TotalPages; @@ -358,6 +364,7 @@ namespace MonoDevelop.DotNetCore.Tests { CreateWizard (); DotNetCoreRuntimesInstalled ("2.1.1"); + DotNetCoreSdksInstalled ("2.1.301"); int pages = wizard.TotalPages; @@ -386,6 +393,7 @@ namespace MonoDevelop.DotNetCore.Tests CreateWizard (); AddSupportedParameters ("NetCoreLibrary"); DotNetCoreRuntimesInstalled ("2.1.2"); + DotNetCoreSdksInstalled ("2.1.302"); int pages = wizard.TotalPages; @@ -416,6 +424,7 @@ namespace MonoDevelop.DotNetCore.Tests CreateWizard (); AddSupportedParameters (supportedParameters); DotNetCoreRuntimesInstalled ("2.1.5", "1.1.2"); + DotNetCoreSdksInstalled ("2.1.403", "1.0.4"); int pages = wizard.TotalPages; @@ -437,6 +446,7 @@ namespace MonoDevelop.DotNetCore.Tests //NOTE: since we are now checking unsupported runtime version // here we set the latest supported one DotNetCoreRuntimesInstalled ("3.0.0-preview-27324-5"); + DotNetCoreSdksInstalled ("3.0.0-preview-27324-5"); int pages = wizard.TotalPages; @@ -469,6 +479,7 @@ namespace MonoDevelop.DotNetCore.Tests { CreateWizard (); DotNetCoreRuntimesInstalled ("2.2.0"); + DotNetCoreSdksInstalled ("2.2.101"); int pages = wizard.TotalPages; @@ -498,7 +509,8 @@ namespace MonoDevelop.DotNetCore.Tests { CreateWizard (); AddSupportedParameters ("NetCoreLibrary"); - DotNetCoreRuntimesInstalled ("2.2.100"); + DotNetCoreRuntimesInstalled ("2.2.6"); + DotNetCoreSdksInstalled ("2.2.401"); int pages = wizard.TotalPages; @@ -531,6 +543,7 @@ namespace MonoDevelop.DotNetCore.Tests CreateWizard (); AddSupportedParameters (supportedParameters); DotNetCoreRuntimesInstalled ("2.2.3", "1.1.2"); + DotNetCoreSdksInstalled ("2.2.202", "1.0.4"); int pages = wizard.TotalPages; @@ -550,7 +563,8 @@ namespace MonoDevelop.DotNetCore.Tests public void NetCoreApp_NetCore21AndNetCore20Installed () { CreateWizard (); - DotNetCoreRuntimesInstalled ("2.1.300", "2.0.1"); + DotNetCoreRuntimesInstalled ("2.1.0", "2.0.3"); + DotNetCoreSdksInstalled ("2.1.300", "2.0.3"); int pages = wizard.TotalPages; diff --git a/main/src/addins/MonoDevelop.DotNetCore/MonoDevelop.DotNetCore/DotNetCoreProjectSupportedTargetFrameworks.cs b/main/src/addins/MonoDevelop.DotNetCore/MonoDevelop.DotNetCore/DotNetCoreProjectSupportedTargetFrameworks.cs index 3084df3e50..468cfd1aa8 100644 --- a/main/src/addins/MonoDevelop.DotNetCore/MonoDevelop.DotNetCore/DotNetCoreProjectSupportedTargetFrameworks.cs +++ b/main/src/addins/MonoDevelop.DotNetCore/MonoDevelop.DotNetCore/DotNetCoreProjectSupportedTargetFrameworks.cs @@ -52,7 +52,7 @@ namespace MonoDevelop.DotNetCore if (framework.IsNetStandard ()) { return GetNetStandardTargetFrameworks (); } else if (framework.IsNetCoreApp ()) { - return GetNetCoreAppTargetFrameworks (); + return GetNetCoreAppTargetFrameworksWithSdkSupport (); } else if (framework.IsNetFramework ()) { return GetNetFrameworkTargetFrameworks (); } @@ -97,6 +97,21 @@ namespace MonoDevelop.DotNetCore } } + public static IEnumerable<TargetFramework> GetNetCoreAppTargetFrameworksWithSdkSupport () + { + foreach (var runtimeVersion in GetMajorRuntimeVersions ()) { + // In DotNetCore version 2.1 and above the Runtime always ships in an Sdk with the same Major.Minor version. For older versions, this + // rule does not apply, but as these versions have been deprecated we will not worry about explicit filtering support here as this + // may cause regressions. + if ((runtimeVersion.Major == 2 && runtimeVersion.Minor >= 1) || runtimeVersion.Major >= 3) { + if (DotNetCoreSdk.Versions.Any (sdkVersion => runtimeVersion.Major == sdkVersion.Major && runtimeVersion.Minor == sdkVersion.Minor)) + yield return CreateTargetFramework (".NETCoreApp", runtimeVersion.ToString (2)); + } else { + yield return CreateTargetFramework (".NETCoreApp", runtimeVersion.ToString (2)); + } + } + } + static IEnumerable<Version> GetMajorRuntimeVersions () { return DotNetCoreRuntime.Versions |