// ==++== // // Copyright (c) Microsoft Corporation. All rights reserved. // // ==--== using System.Runtime; using System.Runtime.CompilerServices; namespace System { [FriendAccessAllowed] internal static class CompatibilitySwitches { private static bool s_AreSwitchesSet; #if FEATURE_CORECLR && !FEATURE_CORESYSTEM private static bool s_isAppEarlierThanSilverlight4; #endif //FEATURE_CORECLR && !FEATURE_CORESYSTEM #if FEATURE_LEGACYNETCF private static bool s_isAppEarlierThanWindowsPhone8; private static bool s_isAppEarlierThanWindowsPhoneMango; #endif //FEATURE_LEGACYNETCF #if FEATURE_CORECLR private static bool s_isAppSilverlight81; // The app targets SL8.1 version private static bool s_useLatestBehaviorWhenTFMNotSpecified; // Which behavior to use when the TFM is not specified. #endif //FEATURE_CORECLR #if !FEATURE_CORECLR private static bool s_isNetFx40TimeSpanLegacyFormatMode; private static bool s_isNetFx40LegacySecurityPolicy; private static bool s_isNetFx45LegacyManagedDeflateStream; #endif //!FEATURE_CORECLR public static bool IsCompatibilityBehaviorDefined { get { return s_AreSwitchesSet; } } private static bool IsCompatibilitySwitchSet(string compatibilitySwitch) { bool? result = AppDomain.CurrentDomain.IsCompatibilitySwitchSet(compatibilitySwitch); return (result.HasValue && result.Value); } internal static void InitializeSwitches() { #if FEATURE_CORECLR && !FEATURE_CORESYSTEM s_isAppEarlierThanSilverlight4 = IsCompatibilitySwitchSet("APP_EARLIER_THAN_SL4.0"); #endif //FEATURE_CORECLR && !FEATURE_CORESYSTEM #if FEATURE_CORECLR s_isAppSilverlight81 = IsCompatibilitySwitchSet("WindowsPhone_5.1.0.0"); s_useLatestBehaviorWhenTFMNotSpecified = IsCompatibilitySwitchSet("UseLatestBehaviorWhenTFMMissing"); #endif //FEATURE_CORECLR #if FEATURE_LEGACYNETCF s_isAppEarlierThanWindowsPhoneMango = IsCompatibilitySwitchSet("WindowsPhone_3.7.0.0"); s_isAppEarlierThanWindowsPhone8 = s_isAppEarlierThanWindowsPhoneMango || IsCompatibilitySwitchSet("WindowsPhone_3.8.0.0"); #endif //FEATURE_LEGACYNETCF #if !FEATURE_CORECLR s_isNetFx40TimeSpanLegacyFormatMode = IsCompatibilitySwitchSet("NetFx40_TimeSpanLegacyFormatMode"); s_isNetFx40LegacySecurityPolicy = IsCompatibilitySwitchSet("NetFx40_LegacySecurityPolicy"); s_isNetFx45LegacyManagedDeflateStream = IsCompatibilitySwitchSet("NetFx45_LegacyManagedDeflateStream"); #endif //FEATURE_CORECLR s_AreSwitchesSet = true; } public static bool IsAppEarlierThanSilverlight4 { get { #if FEATURE_CORECLR && !FEATURE_CORESYSTEM return s_isAppEarlierThanSilverlight4; #else return false; #endif //FEATURE_CORECLR && !FEATURE_CORESYSTEM } } #if FEATURE_CORECLR /// /// This property returns whether the app is hosted under SL 8.1 version /// internal static bool IsAppSilverlight81 { get { // PS - Do not use this property for adding quirks. Please use the exposed properties of BinaryCompatiblity class instead. return s_isAppSilverlight81; } } /// /// This property returns whether to give the latest behavior when the TFM is missing /// internal static bool UseLatestBehaviorWhenTFMNotSpecified { get { return s_useLatestBehaviorWhenTFMNotSpecified; } } #endif //FEATURE_CORECLR public static bool IsAppEarlierThanWindowsPhone8 { get { #if FEATURE_LEGACYNETCF return s_isAppEarlierThanWindowsPhone8; #else return false; #endif //FEATURE_LEGACYNETCF } } public static bool IsAppEarlierThanWindowsPhoneMango { get { #if FEATURE_LEGACYNETCF return s_isAppEarlierThanWindowsPhoneMango; #else return false; #endif //FEATURE_LEGACYNETCF } } public static bool IsNetFx40TimeSpanLegacyFormatMode { get { #if !FEATURE_CORECLR return s_isNetFx40TimeSpanLegacyFormatMode; #else return false; #endif //!FEATURE_CORECLR } } public static bool IsNetFx40LegacySecurityPolicy { get { #if !FEATURE_CORECLR return s_isNetFx40LegacySecurityPolicy; #else return false; #endif //!FEATURE_CORECLR } } public static bool IsNetFx45LegacyManagedDeflateStream { get { #if !FEATURE_CORECLR return s_isNetFx45LegacyManagedDeflateStream; #else return false; #endif //!FEATURE_CORECLR } } } }