bc1f347abb00a2a714daf704abe8b592aac73196
[mono.git] / mcs / class / referencesource / mscorlib / system / AppContext / AppContextDefaultValues.Defaults.cs
1 // ==++==
2 // 
3 //   Copyright (c) Microsoft Corporation.  All rights reserved.
4 // 
5 // ==--==
6 using System;
7
8 namespace System
9 {
10     internal static partial class AppContextDefaultValues
11     {
12
13         internal static readonly string SwitchNoAsyncCurrentCulture = "Switch.System.Globalization.NoAsyncCurrentCulture";
14         internal static readonly string SwitchThrowExceptionIfDisposedCancellationTokenSource = "Switch.System.Threading.ThrowExceptionIfDisposedCancellationTokenSource";
15         internal static readonly string SwitchPreserveEventListnerObjectIdentity = "Switch.System.Diagnostics.EventSource.PreserveEventListnerObjectIdentity";
16
17         
18         // This is a partial method. Platforms can provide an implementation of it that will set override values
19         // from whatever mechanism is available on that platform. If no implementation is provided, the compiler is going to remove the calls
20         // to it from the code
21         // We are going to have an implementation of this method for the Desktop platform that will read the overrides from app.config, registry and
22         // the shim database. Additional implementation can be provided for other platforms.
23         static partial void PopulateOverrideValuesPartial();
24
25         static partial void PopulateDefaultValuesPartial(string platformIdentifier, string profile, int version)
26         {
27             // When defining a new switch  you should add it to the last known version.
28             // For instance, if you are adding a switch in .NET 4.6 (the release after 4.5.2) you should defined your switch
29             // like this:
30             //    if (version <= 40502) ...
31             // This ensures that all previous versions of that platform (up-to 4.5.2) will get the old behavior by default
32             // NOTE: When adding a default value for a switch please make sure that the default value is added to ALL of the existing platforms!
33             // NOTE: When adding a new if statement for the version please ensure that ALL previous switches are enabled (ie. don't use else if)
34             switch (platformIdentifier)
35             {
36                 case ".NETCore":
37                 case ".NETFramework":
38                     {
39                         if (version <= 40502)
40                         {
41                             AppContext.DefineSwitchDefault(SwitchNoAsyncCurrentCulture, true);
42                             AppContext.DefineSwitchDefault(SwitchThrowExceptionIfDisposedCancellationTokenSource, true);
43                         }
44                         break;
45                     }
46                 case "WindowsPhone":
47                 case "WindowsPhoneApp":
48                     {
49                         if (version <= 80100)
50                         {
51                             AppContext.DefineSwitchDefault(SwitchNoAsyncCurrentCulture, true);
52                             AppContext.DefineSwitchDefault(SwitchThrowExceptionIfDisposedCancellationTokenSource, true);
53                         }
54                         break;
55                     }
56             }
57
58             // At this point we should read the overrides if any are defined
59             PopulateOverrideValuesPartial();
60         }
61     }
62 }