diff --git a/src/libraries/System.Configuration.ConfigurationManager/src/ILLink/ILLink.Substitutions.xml b/src/libraries/System.Configuration.ConfigurationManager/src/ILLink/ILLink.Substitutions.xml new file mode 100644 index 00000000000000..c6b0285fce2c24 --- /dev/null +++ b/src/libraries/System.Configuration.ConfigurationManager/src/ILLink/ILLink.Substitutions.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/src/libraries/System.Configuration.ConfigurationManager/src/Resources/Strings.resx b/src/libraries/System.Configuration.ConfigurationManager/src/Resources/Strings.resx index de9cd14cb77b88..cf73ffe71cacae 100644 --- a/src/libraries/System.Configuration.ConfigurationManager/src/Resources/Strings.resx +++ b/src/libraries/System.Configuration.ConfigurationManager/src/Resources/Strings.resx @@ -694,4 +694,7 @@ initializeData needs to be valid for this TraceListener. + + Working with ConfigurationManager is disabled. + diff --git a/src/libraries/System.Configuration.ConfigurationManager/src/System.Configuration.ConfigurationManager.csproj b/src/libraries/System.Configuration.ConfigurationManager/src/System.Configuration.ConfigurationManager.csproj index 0662639c81dcab..67eb28e761b60f 100644 --- a/src/libraries/System.Configuration.ConfigurationManager/src/System.Configuration.ConfigurationManager.csproj +++ b/src/libraries/System.Configuration.ConfigurationManager/src/System.Configuration.ConfigurationManager.csproj @@ -15,6 +15,10 @@ true + + + + diff --git a/src/libraries/System.Configuration.ConfigurationManager/src/System/Configuration/ConfigurationManager.cs b/src/libraries/System.Configuration.ConfigurationManager/src/System/Configuration/ConfigurationManager.cs index f0da80518597ae..3f1204d60f983b 100644 --- a/src/libraries/System.Configuration.ConfigurationManager/src/System/Configuration/ConfigurationManager.cs +++ b/src/libraries/System.Configuration.ConfigurationManager/src/System/Configuration/ConfigurationManager.cs @@ -145,6 +145,9 @@ private static void PrepareConfigSystem() public static object GetSection(string sectionName) { + if (DisableConfigurationManager) + return null; + // Avoid unintended AV's by ensuring sectionName is not empty. // For compatibility, we cannot throw an InvalidArgumentException. if (string.IsNullOrEmpty(sectionName)) return null; @@ -157,6 +160,9 @@ public static object GetSection(string sectionName) public static void RefreshSection(string sectionName) { + if (DisableConfigurationManager) + return; + // Avoid unintended AV's by ensuring sectionName is not empty. // For consistency with GetSection, we should not throw an InvalidArgumentException. if (string.IsNullOrEmpty(sectionName)) return; @@ -201,6 +207,9 @@ public static Configuration OpenMappedExeConfiguration(ExeConfigurationFileMap f private static Configuration OpenExeConfigurationImpl(ConfigurationFileMap fileMap, bool isMachine, ConfigurationUserLevel userLevel, string exePath, bool preLoad = false) { + if (DisableConfigurationManager) + throw new ArgumentException(SR.ConfigurationManagerDisabled); + // exePath must be specified if not running inside ClientConfigurationSystem if (!isMachine && (((fileMap == null) && (exePath == null)) || @@ -243,6 +252,15 @@ private static void PreloadConfigurationSectionGroup(ConfigurationSectionGroup s PreloadConfigurationSectionGroup(childSectionGroup); } + private static bool s_disableConfigurationManager; + private static bool DisableConfigurationManager + { + get + { + return AppContext.TryGetSwitch(@"System.Configuration.ConfigurationManager.DisableConfigurationManager", out s_disableConfigurationManager) ? s_disableConfigurationManager : false; + } + } + private enum InitState { // Initialization has not yet started.