158 lines
4.6 KiB
C#
158 lines
4.6 KiB
C#
|
// ==++==
|
|||
|
//
|
|||
|
// 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_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_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
|
|||
|
{
|
|||
|
#if !FEATURE_CORECLR
|
|||
|
[TargetedPatchingOptOut("Performance critical to inline across NGen image boundaries")]
|
|||
|
#endif
|
|||
|
get
|
|||
|
{
|
|||
|
#if FEATURE_CORECLR && !FEATURE_CORESYSTEM
|
|||
|
return s_isAppEarlierThanSilverlight4;
|
|||
|
#else
|
|||
|
return false;
|
|||
|
#endif //FEATURE_CORECLR && !FEATURE_CORESYSTEM
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
public static bool IsAppEarlierThanWindowsPhone8
|
|||
|
{
|
|||
|
#if !FEATURE_CORECLR
|
|||
|
[TargetedPatchingOptOut("Performance critical to inline across NGen image boundaries")]
|
|||
|
#endif
|
|||
|
get
|
|||
|
{
|
|||
|
#if FEATURE_LEGACYNETCF
|
|||
|
return s_isAppEarlierThanWindowsPhone8;
|
|||
|
#else
|
|||
|
return false;
|
|||
|
#endif //FEATURE_LEGACYNETCF
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
public static bool IsAppEarlierThanWindowsPhoneMango
|
|||
|
{
|
|||
|
#if !FEATURE_CORECLR
|
|||
|
[TargetedPatchingOptOut("Performance critical to inline across NGen image boundaries")]
|
|||
|
#endif
|
|||
|
get
|
|||
|
{
|
|||
|
#if FEATURE_LEGACYNETCF
|
|||
|
return s_isAppEarlierThanWindowsPhoneMango;
|
|||
|
#else
|
|||
|
return false;
|
|||
|
#endif //FEATURE_LEGACYNETCF
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
public static bool IsNetFx40TimeSpanLegacyFormatMode
|
|||
|
{
|
|||
|
#if !FEATURE_CORECLR
|
|||
|
[TargetedPatchingOptOut("Performance critical to inline across NGen image boundaries")]
|
|||
|
#endif
|
|||
|
get
|
|||
|
{
|
|||
|
#if !FEATURE_CORECLR
|
|||
|
return s_isNetFx40TimeSpanLegacyFormatMode;
|
|||
|
#else
|
|||
|
return false;
|
|||
|
#endif //!FEATURE_CORECLR
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
public static bool IsNetFx40LegacySecurityPolicy
|
|||
|
{
|
|||
|
#if !FEATURE_CORECLR
|
|||
|
[TargetedPatchingOptOut("Performance critical to inline across NGen image boundaries")]
|
|||
|
#endif
|
|||
|
get
|
|||
|
{
|
|||
|
#if !FEATURE_CORECLR
|
|||
|
return s_isNetFx40LegacySecurityPolicy;
|
|||
|
#else
|
|||
|
return false;
|
|||
|
#endif //!FEATURE_CORECLR
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
public static bool IsNetFx45LegacyManagedDeflateStream
|
|||
|
{
|
|||
|
#if !FEATURE_CORECLR
|
|||
|
[TargetedPatchingOptOut("Performance critical to inline across NGen image boundaries")]
|
|||
|
#endif
|
|||
|
get
|
|||
|
{
|
|||
|
#if !FEATURE_CORECLR
|
|||
|
return s_isNetFx45LegacyManagedDeflateStream;
|
|||
|
#else
|
|||
|
return false;
|
|||
|
#endif //!FEATURE_CORECLR
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
}
|