From 83e9a3959620da5fd3ecdb1ee9d1fa6a80569cf8 Mon Sep 17 00:00:00 2001 From: Jan Kotas Date: Fri, 22 Feb 2019 17:56:02 -0800 Subject: [PATCH] Change Environment.Version to return product version (#22664) * Change Environment.Version to return product version - Contributes to https://github.com/dotnet/corefx/issues/31099 - Use AssemblyInformationalVersion attribute as fallback * Add sanity test for Environment.Version * Disable CodeDom tests * Fix test assembly name --- .../System.Private.CoreLib.csproj | 13 ++++++++ .../shared/System/Environment.cs | 28 +++++++++++++--- tests/CoreFX/CoreFX.issues.json | 38 ++++++++++++++++++++++ .../system/environment/environment_version.cs | 38 ++++++++++++++++++++++ .../system/environment/environment_version.csproj | 36 ++++++++++++++++++++ 5 files changed, 149 insertions(+), 4 deletions(-) create mode 100644 tests/src/CoreMangLib/system/environment/environment_version.cs create mode 100644 tests/src/CoreMangLib/system/environment/environment_version.csproj diff --git a/src/System.Private.CoreLib/System.Private.CoreLib.csproj b/src/System.Private.CoreLib/System.Private.CoreLib.csproj index 5e98274..6bfc44c 100644 --- a/src/System.Private.CoreLib/System.Private.CoreLib.csproj +++ b/src/System.Private.CoreLib/System.Private.CoreLib.csproj @@ -37,6 +37,19 @@ true $(OutputPath)$(MSBuildProjectName).xml + + + + + $(VersionPrefix) + + + $(InformationalVersion)-$(PreReleaseLabel).$(BuildNumberMajor).$(BuildNumberMinor) + + + $(InformationalVersion)+$(LatestCommit) + + diff --git a/src/System.Private.CoreLib/shared/System/Environment.cs b/src/System.Private.CoreLib/shared/System/Environment.cs index bb99dc8..ade5091 100644 --- a/src/System.Private.CoreLib/shared/System/Environment.cs +++ b/src/System.Private.CoreLib/shared/System/Environment.cs @@ -129,10 +129,30 @@ namespace System public static bool UserInteractive => true; - // Previously this represented the File version of mscorlib.dll. Many other libraries in the framework and outside took dependencies on the first three parts of this version - // remaining constant throughout 4.x. From 4.0 to 4.5.2 this was fine since the file version only incremented the last part. Starting with 4.6 we switched to a file versioning - // scheme that matched the product version. In order to preserve compatibility with existing libraries, this needs to be hard-coded. - public static Version Version => new Version(4, 0, 30319, 42000); + public static Version Version + { + get + { + // FX_PRODUCT_VERSION is expected to be set by the host + string versionString = (string)AppContext.GetData("FX_PRODUCT_VERSION"); + + if (versionString == null) + { + // Use AssemblyInformationalVersionAttribute as fallback if the exact product version is not specified by the host + versionString = typeof(object).Assembly.GetCustomAttribute()?.InformationalVersion; + } + + ReadOnlySpan versionSpan = versionString.AsSpan(); + + // Strip optional suffixes + int separatorIndex = versionSpan.IndexOfAny("-+ "); + if (separatorIndex != -1) + versionSpan = versionSpan.Slice(0, separatorIndex); + + // Return zeros rather then failing if the version string fails to parse + return Version.TryParse(versionSpan, out Version version) ? version : new Version(); + } + } public static long WorkingSet { diff --git a/tests/CoreFX/CoreFX.issues.json b/tests/CoreFX/CoreFX.issues.json index d16c88b..9a1f067 100644 --- a/tests/CoreFX/CoreFX.issues.json +++ b/tests/CoreFX/CoreFX.issues.json @@ -883,6 +883,10 @@ "name": "System.Tests.MathFTests.Min", "reason": "https://github.com/dotnet/coreclr/pull/20912" }, + { + "name": "System.Tests.EnvironmentTests.Version_MatchesFixedVersion", + "reason": "outdated" + }, ] } }, @@ -1557,4 +1561,38 @@ ] } }, + { + "name": "System.CodeDom.Tests", + "enabled": true, + "exclusions": { + "namespaces": null, + "classes": null, + "methods": [ + { + "name": "System.CodeDom.Compiler.Tests.CSharpCodeGenerationTests.ProviderSupports", + "reason": "outdated" + }, + { + "name": "System.CodeDom.Compiler.Tests.CSharpCodeGenerationTests.MetadataAttributes", + "reason": "outdated" + }, + { + "name": "System.CodeDom.Compiler.Tests.CSharpCodeGenerationTests.RegionsSnippetsAndLinePragmas", + "reason": "outdated" + }, + { + "name": "System.CodeDom.Compiler.Tests.VBCodeGenerationTests.RegionsSnippetsAndLinePragmas", + "reason": "outdated" + }, + { + "name": "System.CodeDom.Compiler.Tests.VBCodeGenerationTests.MetadataAttributes", + "reason": "outdated" + }, + { + "name": "System.CodeDom.Compiler.Tests.VBCodeGenerationTests.ProviderSupports", + "reason": "outdated" + } + ] + } + } ] diff --git a/tests/src/CoreMangLib/system/environment/environment_version.cs b/tests/src/CoreMangLib/system/environment/environment_version.cs new file mode 100644 index 0000000..8fbe5e4 --- /dev/null +++ b/tests/src/CoreMangLib/system/environment/environment_version.cs @@ -0,0 +1,38 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +using System; + +class enviroment_version +{ + static int Main() + { + Version ver = Environment.Version; + Console.WriteLine($"Environment.Version = {ver}"); + + if (ver < new Version("3.0")) + { + Console.WriteLine("ERROR: Version less than 3.0."); + return -1; + } + + // Verify that we are not returning hardcoded version from .NET Framework. + if (ver == new Version("4.0.30319.42000")) + { + Console.WriteLine("ERROR: Version is hardcoded .NET Framework version."); + return -1; + } + + // .NET Core assemblies use 4.6+ as file version. Verify that we have not used + // the file version as product version by accident. + if (ver.Major == 4 && (ver.Minor >= 6)) + { + Console.WriteLine("ERROR: Version is 4.6+."); + return -1; + } + + Console.WriteLine("PASSED"); + return 100; + } +} diff --git a/tests/src/CoreMangLib/system/environment/environment_version.csproj b/tests/src/CoreMangLib/system/environment/environment_version.csproj new file mode 100644 index 0000000..b23455b --- /dev/null +++ b/tests/src/CoreMangLib/system/environment/environment_version.csproj @@ -0,0 +1,36 @@ + + + + + Debug + AnyCPU + 2.0 + {95DFC527-4DC1-495E-97D7-E94EE1F7140D} + Exe + {786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + ..\..\ + true + BuildAndRun + 0 + + + + + + + + + False + + + + + + + + + + + + + -- 2.7.4