diff --git a/scripts/build/TestPlatform.Dependencies.props b/scripts/build/TestPlatform.Dependencies.props index e324c3fe1d..78723277e3 100644 --- a/scripts/build/TestPlatform.Dependencies.props +++ b/scripts/build/TestPlatform.Dependencies.props @@ -28,7 +28,6 @@ 4.3.7 1.1.1 - 5.0.0 9.0.1 4.7.63 16.8.0-preview-3968212 diff --git a/scripts/generate/update-supported-nuget.frameworks-versions.ps1 b/scripts/generate/update-supported-nuget.frameworks-versions.ps1 new file mode 100644 index 0000000000..de3c898a6e --- /dev/null +++ b/scripts/generate/update-supported-nuget.frameworks-versions.ps1 @@ -0,0 +1,148 @@ +<# Helps updating framework name translation in Framework class by taking values from Nuget.Frameworks package +and generating all common frameworks into the types that vstest console uses. This removes the dependency on Nuget.Frameworks +from which we consume miniscule part and which causes us a lot of trouble because the VS version and local version differ +#> + +# download a version from nuget and unpack + +$dll = Get-Item "~/Downloads/nuget.frameworks.*\lib\net472\NuGet.Frameworks.dll" + +Import-Module ($dll.FullName) + +$commonFrameworks = [NuGet.Frameworks.FrameworkConstants+CommonFrameworks].GetFields().Name + +# thie generates mapping from the full name to the one that we use internally +@" +// Generated from Nuget.Frameworks $((Get-Module NuGet.Frameworks ).Version) nuget package, +// you can update it by scripts/generate/update-supported-nuget.frameworks-versions.ps1 +static Dictionary mapping = new Dictionary { +$(foreach ($commonFramework in $commonFrameworks) { + + $fmw = [NuGet.Frameworks.FrameworkConstants+CommonFrameworks]::$commonFramework + "[""$($fmw.DotNetFrameworkName)""] = new Framework { + Name = ""$($fmw.DotNetFrameworkName)"", + FrameworkName = ""$($fmw.Framework)"", + Version = ""$($fmw.Version)"", + ShortName = ""$($fmw.GetShortFolderName())"", + },`n" + +}) +}; +"@ + +# this will help you taking the method TryParseCommonFramework from the main branch and updating it to have the uncommon name mappings +# but not use the frameworkconstants +# Take TryParseCommonFramework from https://github.com/NuGet/NuGet.Client/blob/dev/src/NuGet.Core/NuGet.Frameworks/NuGetFrameworkFactory.cs#L586 +# and put it below, in betwwen the @' '@ to get a version that does not need any built in types +@' +private static bool TryParseCommonFramework(string frameworkString, out NuGetFramework framework) + { + framework = null; + + frameworkString = frameworkString.ToLowerInvariant(); + + switch (frameworkString) + { + case "dotnet": + case "dotnet50": + case "dotnet5.0": + framework = FrameworkConstants.CommonFrameworks.DotNet50; + break; + case "net40": + case "net4": + framework = FrameworkConstants.CommonFrameworks.Net4; + break; + case "net45": + framework = FrameworkConstants.CommonFrameworks.Net45; + break; + case "net451": + framework = FrameworkConstants.CommonFrameworks.Net451; + break; + case "net46": + framework = FrameworkConstants.CommonFrameworks.Net46; + break; + case "net461": + framework = FrameworkConstants.CommonFrameworks.Net461; + break; + case "net462": + framework = FrameworkConstants.CommonFrameworks.Net462; + break; + case "win8": + framework = FrameworkConstants.CommonFrameworks.Win8; + break; + case "win81": + framework = FrameworkConstants.CommonFrameworks.Win81; + break; + case "netstandard": + framework = FrameworkConstants.CommonFrameworks.NetStandard; + break; + case "netstandard1.0": + case "netstandard10": + framework = FrameworkConstants.CommonFrameworks.NetStandard10; + break; + case "netstandard1.1": + case "netstandard11": + framework = FrameworkConstants.CommonFrameworks.NetStandard11; + break; + case "netstandard1.2": + case "netstandard12": + framework = FrameworkConstants.CommonFrameworks.NetStandard12; + break; + case "netstandard1.3": + case "netstandard13": + framework = FrameworkConstants.CommonFrameworks.NetStandard13; + break; + case "netstandard1.4": + case "netstandard14": + framework = FrameworkConstants.CommonFrameworks.NetStandard14; + break; + case "netstandard1.5": + case "netstandard15": + framework = FrameworkConstants.CommonFrameworks.NetStandard15; + break; + case "netstandard1.6": + case "netstandard16": + framework = FrameworkConstants.CommonFrameworks.NetStandard16; + break; + case "netstandard1.7": + case "netstandard17": + framework = FrameworkConstants.CommonFrameworks.NetStandard17; + break; + case "netstandard2.0": + case "netstandard20": + framework = FrameworkConstants.CommonFrameworks.NetStandard20; + break; + case "netstandard2.1": + case "netstandard21": + framework = FrameworkConstants.CommonFrameworks.NetStandard21; + break; + case "netcoreapp2.1": + case "netcoreapp21": + framework = FrameworkConstants.CommonFrameworks.NetCoreApp21; + break; + case "netcoreapp3.1": + case "netcoreapp31": + framework = FrameworkConstants.CommonFrameworks.NetCoreApp31; + break; + case "netcoreapp5.0": + case "netcoreapp50": + case "net5.0": + case "net50": + framework = FrameworkConstants.CommonFrameworks.Net50; + break; + } + + return framework != null; + } + +'@ -split "`n" | foreach { + $pattern = "FrameworkConstants.CommonFrameworks.(?.*);" + if ($_ -match $pattern) { + $name = $matches.framework + $fullName = ([Nuget.Frameworks.FrameworkConstants+CommonFrameworks]::$name).DotNetFrameworkName + $_ -replace $pattern, """$fullName"";" + } + else { + $_ -replace "out NuGetFramework framework", "out string framework" + } +} \ No newline at end of file diff --git a/scripts/verify-nupkgs.ps1 b/scripts/verify-nupkgs.ps1 index ca4fe4fbf0..e0415a1bf5 100644 --- a/scripts/verify-nupkgs.ps1 +++ b/scripts/verify-nupkgs.ps1 @@ -15,12 +15,12 @@ function Verify-Nuget-Packages($packageDirectory) $expectedNumOfFiles = @{ "Microsoft.CodeCoverage" = 29; "Microsoft.NET.Test.Sdk" = 13; - "Microsoft.TestPlatform" = 477; + "Microsoft.TestPlatform" = 476; "Microsoft.TestPlatform.Build" = 19; - "Microsoft.TestPlatform.CLI" = 350; + "Microsoft.TestPlatform.CLI" = 348; "Microsoft.TestPlatform.Extensions.TrxLogger" = 33; "Microsoft.TestPlatform.ObjectModel" = 62; - "Microsoft.TestPlatform.Portable" = 566; + "Microsoft.TestPlatform.Portable" = 563; "Microsoft.TestPlatform.TestHost" = 145; "Microsoft.TestPlatform.TranslationLayer" = 121} diff --git a/src/Microsoft.TestPlatform.Extensions.BlameDataCollector/CrashDumperFactory.cs b/src/Microsoft.TestPlatform.Extensions.BlameDataCollector/CrashDumperFactory.cs index 2adb34df10..a70f2c4839 100644 --- a/src/Microsoft.TestPlatform.Extensions.BlameDataCollector/CrashDumperFactory.cs +++ b/src/Microsoft.TestPlatform.Extensions.BlameDataCollector/CrashDumperFactory.cs @@ -6,7 +6,6 @@ namespace Microsoft.TestPlatform.Extensions.BlameDataCollector using System; using System.Runtime.InteropServices; using Microsoft.VisualStudio.TestPlatform.ObjectModel; - using NuGet.Frameworks; internal class CrashDumperFactory : ICrashDumperFactory { @@ -19,15 +18,15 @@ public ICrashDumper Create(string targetFramework) EqtTrace.Info($"CrashDumperFactory: Creating dumper for {RuntimeInformation.OSDescription} with target framework {targetFramework}."); - var tfm = NuGetFramework.Parse(targetFramework); + var tfm = Framework.FromString(targetFramework); - if (tfm == null || tfm.IsUnsupported) + if (tfm == null) { EqtTrace.Error($"CrashDumperFactory: Could not parse target framework {targetFramework}, to a supported framework version."); throw new NotSupportedException($"Could not parse target framework {targetFramework}, to a supported framework version."); } - var isNet50OrNewer = tfm.Framework == ".NETCoreApp" && tfm.Version >= Version.Parse("5.0.0.0"); + var isNet50OrNewer = tfm.FrameworkName == ".NETCoreApp" && Version.Parse(tfm.Version) >= Version.Parse("5.0.0.0"); if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows)) { diff --git a/src/Microsoft.TestPlatform.Extensions.BlameDataCollector/HangDumperFactory.cs b/src/Microsoft.TestPlatform.Extensions.BlameDataCollector/HangDumperFactory.cs index ea6e355d4e..ab5c2905e8 100644 --- a/src/Microsoft.TestPlatform.Extensions.BlameDataCollector/HangDumperFactory.cs +++ b/src/Microsoft.TestPlatform.Extensions.BlameDataCollector/HangDumperFactory.cs @@ -6,7 +6,6 @@ namespace Microsoft.TestPlatform.Extensions.BlameDataCollector using System; using System.Runtime.InteropServices; using Microsoft.VisualStudio.TestPlatform.ObjectModel; - using NuGet.Frameworks; internal class HangDumperFactory : IHangDumperFactory { @@ -21,9 +20,9 @@ public IHangDumper Create(string targetFramework) EqtTrace.Info($"HangDumperFactory: Creating dumper for {RuntimeInformation.OSDescription} with target framework {targetFramework}."); - var tfm = NuGetFramework.Parse(targetFramework); + var tfm = Framework.FromString(targetFramework); - if (tfm == null || tfm.IsUnsupported) + if (tfm == null) { EqtTrace.Error($"HangDumperFactory: Could not parse target framework {targetFramework}, to a supported framework version."); throw new NotSupportedException($"Could not parse target framework {targetFramework}, to a supported framework version."); @@ -37,7 +36,7 @@ public IHangDumper Create(string targetFramework) if (RuntimeInformation.IsOSPlatform(OSPlatform.Linux)) { - var isLessThan31 = tfm.Framework == ".NETCoreApp" && tfm.Version < Version.Parse("3.1.0.0"); + var isLessThan31 = tfm.FrameworkName == ".NETCoreApp" && Version.Parse(tfm.Version) < Version.Parse("3.1.0.0"); if (isLessThan31) { EqtTrace.Info($"HangDumperFactory: This is Linux on netcoreapp2.1, returning SigtrapDumper."); @@ -51,7 +50,7 @@ public IHangDumper Create(string targetFramework) if (RuntimeInformation.IsOSPlatform(OSPlatform.OSX)) { - var isLessThan50 = tfm.Framework == ".NETCoreApp" && tfm.Version < Version.Parse("5.0.0.0"); + var isLessThan50 = tfm.FrameworkName == ".NETCoreApp" && Version.Parse(tfm.Version) < Version.Parse("5.0.0.0"); if (isLessThan50) { EqtTrace.Info($"HangDumperFactory: This is OSX on {targetFramework}, This combination of OS and framework is not supported."); diff --git a/src/Microsoft.TestPlatform.Extensions.HtmlLogger/HtmlLogger.cs b/src/Microsoft.TestPlatform.Extensions.HtmlLogger/HtmlLogger.cs index 0910bd0213..e2eb5a4ef9 100644 --- a/src/Microsoft.TestPlatform.Extensions.HtmlLogger/HtmlLogger.cs +++ b/src/Microsoft.TestPlatform.Extensions.HtmlLogger/HtmlLogger.cs @@ -22,7 +22,6 @@ namespace Microsoft.VisualStudio.TestPlatform.Extensions.HtmlLogger using HtmlResource = Resources.Resources; using HtmlLoggerConstants = Constants; - using NuGet.Frameworks; /// /// Logger for generating Html. @@ -291,7 +290,7 @@ public void TestRunCompleteHandler(object sender, TestRunCompleteEventArgs e) var framework = this.parametersDictionary[DefaultLoggerParameterNames.TargetFramework]; if (framework != null) { - framework = NuGetFramework.Parse(framework).GetShortFolderName(); + framework = Framework.GetShortFolderName(framework); logFilePrefixValue = logFilePrefixValue + "_" + framework; } diff --git a/src/Microsoft.TestPlatform.Extensions.TrxLogger/TrxLogger.cs b/src/Microsoft.TestPlatform.Extensions.TrxLogger/TrxLogger.cs index 0c669ecfc8..6e7303c6dd 100644 --- a/src/Microsoft.TestPlatform.Extensions.TrxLogger/TrxLogger.cs +++ b/src/Microsoft.TestPlatform.Extensions.TrxLogger/TrxLogger.cs @@ -10,7 +10,6 @@ namespace Microsoft.VisualStudio.TestPlatform.Extensions.TrxLogger using Microsoft.VisualStudio.TestPlatform.ObjectModel.Client; using Microsoft.VisualStudio.TestPlatform.Utilities; using Microsoft.VisualStudio.TestPlatform.Utilities.Helpers.Interfaces; - using NuGet.Frameworks; using ObjectModel.Logging; using System; using System.Collections.Concurrent; @@ -509,7 +508,7 @@ private string AcquireTrxFileNamePath(out bool shouldOverwrite) { if (parametersDictionary.TryGetValue(DefaultLoggerParameterNames.TargetFramework, out var framework) && framework != null) { - framework = NuGetFramework.Parse(framework).GetShortFolderName(); + framework = Framework.GetShortFolderName(framework); logFilePrefixValue = logFilePrefixValue + "_" + framework; } diff --git a/src/Microsoft.TestPlatform.ObjectModel/Framework.cs b/src/Microsoft.TestPlatform.ObjectModel/Framework.cs index 005df6147e..89762c377b 100644 --- a/src/Microsoft.TestPlatform.ObjectModel/Framework.cs +++ b/src/Microsoft.TestPlatform.ObjectModel/Framework.cs @@ -3,14 +3,592 @@ namespace Microsoft.VisualStudio.TestPlatform.ObjectModel { - using NuGet.Frameworks; - using static NuGet.Frameworks.FrameworkConstants; + using System.Collections.Generic; + using System.Linq; /// /// Class for target Framework for the test container /// public class Framework { + #region Generated code + // Generated from Nuget.Frameworks 5.7.0.7 nuget package, + // you can update it by scripts/generate/update-supported-nuget.frameworks-versions.ps1 + internal static Dictionary mapping = new Dictionary + { + [".NETFramework,Version=v1.1"] = new Framework + { + Name = ".NETFramework,Version=v1.1", + FrameworkName = ".NETFramework", + Version = "1.1.0.0", + ShortName = "net11", + }, + [".NETFramework,Version=v2.0"] = new Framework + { + Name = ".NETFramework,Version=v2.0", + FrameworkName = ".NETFramework", + Version = "2.0.0.0", + ShortName = "net20", + }, + [".NETFramework,Version=v3.5"] = new Framework + { + Name = ".NETFramework,Version=v3.5", + FrameworkName = ".NETFramework", + Version = "3.5.0.0", + ShortName = "net35", + }, + [".NETFramework,Version=v4.0"] = new Framework + { + Name = ".NETFramework,Version=v4.0", + FrameworkName = ".NETFramework", + Version = "4.0.0.0", + ShortName = "net40", + }, + [".NETFramework,Version=v4.0.3"] = new Framework + { + Name = ".NETFramework,Version=v4.0.3", + FrameworkName = ".NETFramework", + Version = "4.0.3.0", + ShortName = "net403", + }, + [".NETFramework,Version=v4.5"] = new Framework + { + Name = ".NETFramework,Version=v4.5", + FrameworkName = ".NETFramework", + Version = "4.5.0.0", + ShortName = "net45", + }, + [".NETFramework,Version=v4.5.1"] = new Framework + { + Name = ".NETFramework,Version=v4.5.1", + FrameworkName = ".NETFramework", + Version = "4.5.1.0", + ShortName = "net451", + }, + [".NETFramework,Version=v4.5.2"] = new Framework + { + Name = ".NETFramework,Version=v4.5.2", + FrameworkName = ".NETFramework", + Version = "4.5.2.0", + ShortName = "net452", + }, + [".NETFramework,Version=v4.6"] = new Framework + { + Name = ".NETFramework,Version=v4.6", + FrameworkName = ".NETFramework", + Version = "4.6.0.0", + ShortName = "net46", + }, + [".NETFramework,Version=v4.6.1"] = new Framework + { + Name = ".NETFramework,Version=v4.6.1", + FrameworkName = ".NETFramework", + Version = "4.6.1.0", + ShortName = "net461", + }, + [".NETFramework,Version=v4.6.2"] = new Framework + { + Name = ".NETFramework,Version=v4.6.2", + FrameworkName = ".NETFramework", + Version = "4.6.2.0", + ShortName = "net462", + }, + [".NETFramework,Version=v4.6.3"] = new Framework + { + Name = ".NETFramework,Version=v4.6.3", + FrameworkName = ".NETFramework", + Version = "4.6.3.0", + ShortName = "net463", + }, + [".NETCore,Version=v4.5"] = new Framework + { + Name = ".NETCore,Version=v4.5", + FrameworkName = ".NETCore", + Version = "4.5.0.0", + ShortName = "netcore45", + }, + [".NETCore,Version=v4.5.1"] = new Framework + { + Name = ".NETCore,Version=v4.5.1", + FrameworkName = ".NETCore", + Version = "4.5.1.0", + ShortName = "netcore451", + }, + [".NETCore,Version=v5.0"] = new Framework + { + Name = ".NETCore,Version=v5.0", + FrameworkName = ".NETCore", + Version = "5.0.0.0", + ShortName = "netcore50", + }, + ["Windows,Version=v8.0"] = new Framework + { + Name = "Windows,Version=v8.0", + FrameworkName = "Windows", + Version = "8.0.0.0", + ShortName = "win8", + }, + ["Windows,Version=v8.1"] = new Framework + { + Name = "Windows,Version=v8.1", + FrameworkName = "Windows", + Version = "8.1.0.0", + ShortName = "win81", + }, + ["Windows,Version=v10.0"] = new Framework + { + Name = "Windows,Version=v10.0", + FrameworkName = "Windows", + Version = "10.0.0.0", + ShortName = "win10.0", + }, + ["Silverlight,Version=v4.0"] = new Framework + { + Name = "Silverlight,Version=v4.0", + FrameworkName = "Silverlight", + Version = "4.0.0.0", + ShortName = "sl4", + }, + ["Silverlight,Version=v5.0"] = new Framework + { + Name = "Silverlight,Version=v5.0", + FrameworkName = "Silverlight", + Version = "5.0.0.0", + ShortName = "sl5", + }, + ["WindowsPhone,Version=v7.0"] = new Framework + { + Name = "WindowsPhone,Version=v7.0", + FrameworkName = "WindowsPhone", + Version = "7.0.0.0", + ShortName = "wp7", + }, + ["WindowsPhone,Version=v7.5"] = new Framework + { + Name = "WindowsPhone,Version=v7.5", + FrameworkName = "WindowsPhone", + Version = "7.5.0.0", + ShortName = "wp75", + }, + ["WindowsPhone,Version=v8.0"] = new Framework + { + Name = "WindowsPhone,Version=v8.0", + FrameworkName = "WindowsPhone", + Version = "8.0.0.0", + ShortName = "wp8", + }, + ["WindowsPhone,Version=v8.1"] = new Framework + { + Name = "WindowsPhone,Version=v8.1", + FrameworkName = "WindowsPhone", + Version = "8.1.0.0", + ShortName = "wp81", + }, + ["WindowsPhoneApp,Version=v8.1"] = new Framework + { + Name = "WindowsPhoneApp,Version=v8.1", + FrameworkName = "WindowsPhoneApp", + Version = "8.1.0.0", + ShortName = "wpa81", + }, + ["Tizen,Version=v3.0"] = new Framework + { + Name = "Tizen,Version=v3.0", + FrameworkName = "Tizen", + Version = "3.0.0.0", + ShortName = "tizen30", + }, + ["Tizen,Version=v4.0"] = new Framework + { + Name = "Tizen,Version=v4.0", + FrameworkName = "Tizen", + Version = "4.0.0.0", + ShortName = "tizen40", + }, + ["Tizen,Version=v6.0"] = new Framework + { + Name = "Tizen,Version=v6.0", + FrameworkName = "Tizen", + Version = "6.0.0.0", + ShortName = "tizen60", + }, + ["ASP.NET,Version=v0.0"] = new Framework + { + Name = "ASP.NET,Version=v0.0", + FrameworkName = "ASP.NET", + Version = "0.0.0.0", + ShortName = "aspnet", + }, + ["ASP.NETCore,Version=v0.0"] = new Framework + { + Name = "ASP.NETCore,Version=v0.0", + FrameworkName = "ASP.NETCore", + Version = "0.0.0.0", + ShortName = "aspnetcore", + }, + ["ASP.NET,Version=v5.0"] = new Framework + { + Name = "ASP.NET,Version=v5.0", + FrameworkName = "ASP.NET", + Version = "5.0.0.0", + ShortName = "aspnet50", + }, + ["ASP.NETCore,Version=v5.0"] = new Framework + { + Name = "ASP.NETCore,Version=v5.0", + FrameworkName = "ASP.NETCore", + Version = "5.0.0.0", + ShortName = "aspnetcore50", + }, + ["DNX,Version=v0.0"] = new Framework + { + Name = "DNX,Version=v0.0", + FrameworkName = "DNX", + Version = "0.0.0.0", + ShortName = "dnx", + }, + ["DNX,Version=v4.5"] = new Framework + { + Name = "DNX,Version=v4.5", + FrameworkName = "DNX", + Version = "4.5.0.0", + ShortName = "dnx45", + }, + ["DNX,Version=v4.5.1"] = new Framework + { + Name = "DNX,Version=v4.5.1", + FrameworkName = "DNX", + Version = "4.5.1.0", + ShortName = "dnx451", + }, + ["DNX,Version=v4.5.2"] = new Framework + { + Name = "DNX,Version=v4.5.2", + FrameworkName = "DNX", + Version = "4.5.2.0", + ShortName = "dnx452", + }, + ["DNXCore,Version=v0.0"] = new Framework + { + Name = "DNXCore,Version=v0.0", + FrameworkName = "DNXCore", + Version = "0.0.0.0", + ShortName = "dnxcore", + }, + ["DNXCore,Version=v5.0"] = new Framework + { + Name = "DNXCore,Version=v5.0", + FrameworkName = "DNXCore", + Version = "5.0.0.0", + ShortName = "dnxcore50", + }, + [".NETPlatform,Version=v5.0"] = new Framework + { + Name = ".NETPlatform,Version=v5.0", + FrameworkName = ".NETPlatform", + Version = "0.0.0.0", + ShortName = "dotnet", + }, + [".NETPlatform,Version=v5.0"] = new Framework + { + Name = ".NETPlatform,Version=v5.0", + FrameworkName = ".NETPlatform", + Version = "5.0.0.0", + ShortName = "dotnet", + }, + [".NETPlatform,Version=v5.1"] = new Framework + { + Name = ".NETPlatform,Version=v5.1", + FrameworkName = ".NETPlatform", + Version = "5.1.0.0", + ShortName = "dotnet51", + }, + [".NETPlatform,Version=v5.2"] = new Framework + { + Name = ".NETPlatform,Version=v5.2", + FrameworkName = ".NETPlatform", + Version = "5.2.0.0", + ShortName = "dotnet52", + }, + [".NETPlatform,Version=v5.3"] = new Framework + { + Name = ".NETPlatform,Version=v5.3", + FrameworkName = ".NETPlatform", + Version = "5.3.0.0", + ShortName = "dotnet53", + }, + [".NETPlatform,Version=v5.4"] = new Framework + { + Name = ".NETPlatform,Version=v5.4", + FrameworkName = ".NETPlatform", + Version = "5.4.0.0", + ShortName = "dotnet54", + }, + [".NETPlatform,Version=v5.5"] = new Framework + { + Name = ".NETPlatform,Version=v5.5", + FrameworkName = ".NETPlatform", + Version = "5.5.0.0", + ShortName = "dotnet55", + }, + [".NETPlatform,Version=v5.6"] = new Framework + { + Name = ".NETPlatform,Version=v5.6", + FrameworkName = ".NETPlatform", + Version = "5.6.0.0", + ShortName = "dotnet56", + }, + [".NETStandard,Version=v0.0"] = new Framework + { + Name = ".NETStandard,Version=v0.0", + FrameworkName = ".NETStandard", + Version = "0.0.0.0", + ShortName = "netstandard", + }, + [".NETStandard,Version=v1.0"] = new Framework + { + Name = ".NETStandard,Version=v1.0", + FrameworkName = ".NETStandard", + Version = "1.0.0.0", + ShortName = "netstandard1.0", + }, + [".NETStandard,Version=v1.1"] = new Framework + { + Name = ".NETStandard,Version=v1.1", + FrameworkName = ".NETStandard", + Version = "1.1.0.0", + ShortName = "netstandard1.1", + }, + [".NETStandard,Version=v1.2"] = new Framework + { + Name = ".NETStandard,Version=v1.2", + FrameworkName = ".NETStandard", + Version = "1.2.0.0", + ShortName = "netstandard1.2", + }, + [".NETStandard,Version=v1.3"] = new Framework + { + Name = ".NETStandard,Version=v1.3", + FrameworkName = ".NETStandard", + Version = "1.3.0.0", + ShortName = "netstandard1.3", + }, + [".NETStandard,Version=v1.4"] = new Framework + { + Name = ".NETStandard,Version=v1.4", + FrameworkName = ".NETStandard", + Version = "1.4.0.0", + ShortName = "netstandard1.4", + }, + [".NETStandard,Version=v1.5"] = new Framework + { + Name = ".NETStandard,Version=v1.5", + FrameworkName = ".NETStandard", + Version = "1.5.0.0", + ShortName = "netstandard1.5", + }, + [".NETStandard,Version=v1.6"] = new Framework + { + Name = ".NETStandard,Version=v1.6", + FrameworkName = ".NETStandard", + Version = "1.6.0.0", + ShortName = "netstandard1.6", + }, + [".NETStandard,Version=v1.7"] = new Framework + { + Name = ".NETStandard,Version=v1.7", + FrameworkName = ".NETStandard", + Version = "1.7.0.0", + ShortName = "netstandard1.7", + }, + [".NETStandard,Version=v2.0"] = new Framework + { + Name = ".NETStandard,Version=v2.0", + FrameworkName = ".NETStandard", + Version = "2.0.0.0", + ShortName = "netstandard2.0", + }, + [".NETStandard,Version=v2.1"] = new Framework + { + Name = ".NETStandard,Version=v2.1", + FrameworkName = ".NETStandard", + Version = "2.1.0.0", + ShortName = "netstandard2.1", + }, + [".NETStandardApp,Version=v1.5"] = new Framework + { + Name = ".NETStandardApp,Version=v1.5", + FrameworkName = ".NETStandardApp", + Version = "1.5.0.0", + ShortName = "netstandardapp15", + }, + ["UAP,Version=v10.0"] = new Framework + { + Name = "UAP,Version=v10.0", + FrameworkName = "UAP", + Version = "10.0.0.0", + ShortName = "uap10.0", + }, + [".NETCoreApp,Version=v1.0"] = new Framework + { + Name = ".NETCoreApp,Version=v1.0", + FrameworkName = ".NETCoreApp", + Version = "1.0.0.0", + ShortName = "netcoreapp1.0", + }, + [".NETCoreApp,Version=v1.1"] = new Framework + { + Name = ".NETCoreApp,Version=v1.1", + FrameworkName = ".NETCoreApp", + Version = "1.1.0.0", + ShortName = "netcoreapp1.1", + }, + [".NETCoreApp,Version=v2.0"] = new Framework + { + Name = ".NETCoreApp,Version=v2.0", + FrameworkName = ".NETCoreApp", + Version = "2.0.0.0", + ShortName = "netcoreapp2.0", + }, + [".NETCoreApp,Version=v2.1"] = new Framework + { + Name = ".NETCoreApp,Version=v2.1", + FrameworkName = ".NETCoreApp", + Version = "2.1.0.0", + ShortName = "netcoreapp2.1", + }, + [".NETCoreApp,Version=v2.2"] = new Framework + { + Name = ".NETCoreApp,Version=v2.2", + FrameworkName = ".NETCoreApp", + Version = "2.2.0.0", + ShortName = "netcoreapp2.2", + }, + [".NETCoreApp,Version=v3.0"] = new Framework + { + Name = ".NETCoreApp,Version=v3.0", + FrameworkName = ".NETCoreApp", + Version = "3.0.0.0", + ShortName = "netcoreapp3.0", + }, + [".NETCoreApp,Version=v3.1"] = new Framework + { + Name = ".NETCoreApp,Version=v3.1", + FrameworkName = ".NETCoreApp", + Version = "3.1.0.0", + ShortName = "netcoreapp3.1", + }, + [".NETCoreApp,Version=v5.0"] = new Framework + { + Name = ".NETCoreApp,Version=v5.0", + FrameworkName = ".NETCoreApp", + Version = "5.0.0.0", + ShortName = "net5.0", + }, + + }; + private static bool TryParseCommonFramework(string frameworkString, out string framework) + { + framework = null; + + frameworkString = frameworkString.ToLowerInvariant(); + + switch (frameworkString) + { + case "dotnet": + case "dotnet50": + case "dotnet5.0": + framework = ".NETPlatform,Version=v5.0"; + break; + case "net40": + case "net4": + framework = ".NETFramework,Version=v4.0"; + break; + case "net45": + framework = ".NETFramework,Version=v4.5"; + break; + case "net451": + framework = ".NETFramework,Version=v4.5.1"; + break; + case "net46": + framework = ".NETFramework,Version=v4.6"; + break; + case "net461": + framework = ".NETFramework,Version=v4.6.1"; + break; + case "net462": + framework = ".NETFramework,Version=v4.6.2"; + break; + case "win8": + framework = "Windows,Version=v8.0"; + break; + case "win81": + framework = "Windows,Version=v8.1"; + break; + case "netstandard": + framework = ".NETStandard,Version=v0.0"; + break; + case "netstandard1.0": + case "netstandard10": + framework = ".NETStandard,Version=v1.0"; + break; + case "netstandard1.1": + case "netstandard11": + framework = ".NETStandard,Version=v1.1"; + break; + case "netstandard1.2": + case "netstandard12": + framework = ".NETStandard,Version=v1.2"; + break; + case "netstandard1.3": + case "netstandard13": + framework = ".NETStandard,Version=v1.3"; + break; + case "netstandard1.4": + case "netstandard14": + framework = ".NETStandard,Version=v1.4"; + break; + case "netstandard1.5": + case "netstandard15": + framework = ".NETStandard,Version=v1.5"; + break; + case "netstandard1.6": + case "netstandard16": + framework = ".NETStandard,Version=v1.6"; + break; + case "netstandard1.7": + case "netstandard17": + framework = ".NETStandard,Version=v1.7"; + break; + case "netstandard2.0": + case "netstandard20": + framework = ".NETStandard,Version=v2.0"; + break; + case "netstandard2.1": + case "netstandard21": + framework = ".NETStandard,Version=v2.1"; + break; + case "netcoreapp2.1": + case "netcoreapp21": + framework = ".NETCoreApp,Version=v2.1"; + break; + case "netcoreapp3.1": + case "netcoreapp31": + framework = ".NETCoreApp,Version=v3.1"; + break; + case "netcoreapp5.0": + case "netcoreapp50": + case "net5.0": + case "net50": + framework = ".NETCoreApp,Version=v5.0"; + break; + } + + return framework != null; + } + + #endregion + #if NETFRAMEWORK private static readonly Framework Default = Framework.FromString(".NETFramework,Version=v4.0"); #else @@ -31,11 +609,21 @@ private Framework() /// public string Name { get; private set; } + /// + /// Gets the framework name such as .NETCoreApp. + /// + public string FrameworkName { get; private set; } + /// /// Gets the framework version. /// public string Version { get; private set; } + /// + /// Common short name, as well as directory name, such as net5.0. + /// + public string ShortName { get; private set; } + /// /// Returns a valid framework else returns null /// @@ -48,41 +636,45 @@ public static Framework FromString(string frameworkString) return null; } - NuGetFramework nugetFramework; try { // IDE always sends framework in form of ENUM, which always throws exception // This throws up in first chance exception, refer Bug https://devdiv.visualstudio.com/DefaultCollection/DevDiv/_workitems/edit/591142 switch (frameworkString.Trim().ToLower()) { + // Maps common names to newer version of a common name, + // not adding it to TryParseCommonFramework below, because that is + // copied from Nuget.Frameworks, and we might need to update that in the future + // which would likely cause these additional names to get lost. case "framework35": - nugetFramework = CommonFrameworks.Net35; + frameworkString = "net35"; break; case "framework40": - nugetFramework = CommonFrameworks.Net4; + frameworkString = "net40"; break; case "framework45": - nugetFramework = CommonFrameworks.Net45; + frameworkString = "net45"; break; case "frameworkcore10": - nugetFramework = CommonFrameworks.NetCoreApp10; + frameworkString = "netcoreapp1.0"; break; case "frameworkuap10": - nugetFramework = CommonFrameworks.UAP10; - break; - default: - nugetFramework = NuGetFramework.Parse(frameworkString); - if (nugetFramework.IsUnsupported) - return null; + case "uap10": + frameworkString = "uap10.0"; break; } + + return TryParse(frameworkString, out var framework) ? framework : null; } catch { return null; } + } - return new Framework() { Name = nugetFramework.DotNetFrameworkName, Version = nugetFramework.Version.ToString() }; + public static string GetShortFolderName(string frameworkName) + { + return FromString(frameworkName)?.ShortName ?? frameworkName; } /// @@ -93,5 +685,40 @@ public override string ToString() { return this.Name; } + + internal static bool TryParse(string frameworkString, out Framework framework) + { + if (string.IsNullOrWhiteSpace(frameworkString)) + { + framework = null; + return false; + } + + if (mapping.TryGetValue(frameworkString, out framework)) + { + // we found it by long name + return true; + } + + var byShortName = mapping.Values.SingleOrDefault(t => t.ShortName == frameworkString); + if (byShortName != null) + { + // we found it by a common short name, e.g net5.0 + framework = byShortName; + return true; + } + + if (TryParseCommonFramework(frameworkString, out var fullName)) + { + // we found it by uncommon short name e.g. net50 + // we get long name, try find it in the mapping + if (mapping.TryGetValue(frameworkString, out framework)) + { + return true; + } + } + + return false; + } } } diff --git a/src/Microsoft.TestPlatform.ObjectModel/Microsoft.TestPlatform.ObjectModel.csproj b/src/Microsoft.TestPlatform.ObjectModel/Microsoft.TestPlatform.ObjectModel.csproj index cd06e0ee08..053efa75da 100644 --- a/src/Microsoft.TestPlatform.ObjectModel/Microsoft.TestPlatform.ObjectModel.csproj +++ b/src/Microsoft.TestPlatform.ObjectModel/Microsoft.TestPlatform.ObjectModel.csproj @@ -31,7 +31,6 @@ - 1.6.0 diff --git a/src/package/nuspec/Microsoft.TestPlatform.Portable.nuspec b/src/package/nuspec/Microsoft.TestPlatform.Portable.nuspec index 8fe99cdf03..ca76543594 100644 --- a/src/package/nuspec/Microsoft.TestPlatform.Portable.nuspec +++ b/src/package/nuspec/Microsoft.TestPlatform.Portable.nuspec @@ -76,7 +76,6 @@ - @@ -291,7 +290,6 @@ - @@ -426,7 +424,6 @@ - diff --git a/src/package/nuspec/Microsoft.TestPlatform.nuspec b/src/package/nuspec/Microsoft.TestPlatform.nuspec index 61a9b3531e..d6d9fe573d 100644 --- a/src/package/nuspec/Microsoft.TestPlatform.nuspec +++ b/src/package/nuspec/Microsoft.TestPlatform.nuspec @@ -96,7 +96,6 @@ - diff --git a/src/package/nuspec/TestPlatform.ObjectModel.nuspec b/src/package/nuspec/TestPlatform.ObjectModel.nuspec index 342628c057..38fd784a6d 100644 --- a/src/package/nuspec/TestPlatform.ObjectModel.nuspec +++ b/src/package/nuspec/TestPlatform.ObjectModel.nuspec @@ -17,10 +17,6 @@ - - - - diff --git a/src/vstest.console/Internal/ConsoleLogger.cs b/src/vstest.console/Internal/ConsoleLogger.cs index a9d2371d0c..b21f639421 100644 --- a/src/vstest.console/Internal/ConsoleLogger.cs +++ b/src/vstest.console/Internal/ConsoleLogger.cs @@ -16,7 +16,6 @@ namespace Microsoft.VisualStudio.TestPlatform.CommandLine.Internal using Microsoft.VisualStudio.TestPlatform.ObjectModel.Client; using Microsoft.VisualStudio.TestPlatform.ObjectModel.Logging; using Microsoft.VisualStudio.TestPlatform.Utilities; - using NuGet.Frameworks; using CommandLineResources = Resources.Resources; /// /// Logger for sending output to the console. @@ -239,7 +238,7 @@ public void Initialize(TestLoggerEvents events, Dictionary param } parameters.TryGetValue(DefaultLoggerParameterNames.TargetFramework, out this.targetFramework); - this.targetFramework = !string.IsNullOrEmpty(this.targetFramework) ? NuGetFramework.Parse(this.targetFramework).GetShortFolderName() : this.targetFramework; + this.targetFramework = !string.IsNullOrEmpty(this.targetFramework) ? Framework.GetShortFolderName(this.targetFramework) : this.targetFramework; Initialize(events, String.Empty); }