File: system\compatibilityswitches.cs
Project: ndp\clr\src\bcl\mscorlib.csproj (mscorlib)
// ==++==
//
//   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
        /// <summary>
        /// This property returns whether the app is hosted under SL 8.1 version
        /// </summary>
        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;
            }
        }
 
        /// <summary>
        /// This property returns whether to give the latest behavior when the TFM is missing
        /// </summary>
        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
            }
        }
    }
}