ImplicitMachineConfigHost
using System.Configuration.Internal;
using System.IO;
using System.Text;
namespace System.Configuration
{
internal sealed class ImplicitMachineConfigHost : DelegatingConfigHost
{
private string _machineStreamName;
private ConfigurationFileMap _fileMap;
private const string ImplicitMachineConfig = "<configuration>\r\n <configSections>\r\n <section name='appSettings' type='System.Configuration.AppSettingsSection, System.Configuration.ConfigurationManager' restartOnExternalChanges='false' requirePermission='false' />\r\n <section name='connectionStrings' type='System.Configuration.ConnectionStringsSection, System.Configuration.ConfigurationManager' requirePermission='false' />\r\n <section name='mscorlib' type='System.Configuration.IgnoreSection, System.Configuration.ConfigurationManager' allowLocation='false' />\r\n <section name='runtime' type='System.Configuration.IgnoreSection, System.Configuration.ConfigurationManager' allowLocation='false' />\r\n <section name='assemblyBinding' type='System.Configuration.IgnoreSection, System.Configuration.ConfigurationManager' allowLocation='false' />\r\n <section name='satelliteassemblies' type='System.Configuration.IgnoreSection, System.Configuration.ConfigurationManager' allowLocation='false' />\r\n <section name='startup' type='System.Configuration.IgnoreSection, System.Configuration.ConfigurationManager' allowLocation='false' />\r\n <section name='system.diagnostics' type='System.Diagnostics.SystemDiagnosticsSection, System.Configuration.ConfigurationManager' allowLocation='false' />\r\n </configSections>\r\n <configProtectedData defaultProvider='RsaProtectedConfigurationProvider'>\r\n <providers>\r\n <add name = 'RsaProtectedConfigurationProvider' type='System.Configuration.RsaProtectedConfigurationProvider, System.Configuration.ConfigurationManager' description='Uses RsaCryptoServiceProvider to encrypt and decrypt' keyContainerName='NetFrameworkConfigurationKey' cspProviderName='' useMachineContainer='true' useOAEP='false' />\r\n <add name = 'DataProtectionConfigurationProvider' type='System.Configuration.DpapiProtectedConfigurationProvider, System.Configuration.ConfigurationManager' description='Uses CryptProtectData and CryptUnProtectData Windows APIs to encrypt and decrypt' useMachineProtection='true' keyEntropy='' />\r\n </providers>\r\n </configProtectedData>\r\n <connectionStrings>\r\n <add name = 'LocalSqlServer' connectionString='data source=.\\SQLEXPRESS;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|aspnetdb.mdf;User Instance=true' providerName='System.Data.SqlClient' />\r\n </connectionStrings>\r\n</configuration>";
internal ImplicitMachineConfigHost(IInternalConfigHost host)
{
base.Host = host;
}
public override void InitForConfiguration(ref string locationSubPath, out string configPath, out string locationConfigPath, IInternalConfigRoot configRoot, params object[] hostInitConfigurationParams)
{
GetFileMap(hostInitConfigurationParams);
base.InitForConfiguration(ref locationSubPath, out configPath, out locationConfigPath, configRoot, hostInitConfigurationParams);
}
public override void Init(IInternalConfigRoot configRoot, params object[] hostInitParams)
{
GetFileMap(hostInitParams);
base.Init(configRoot, hostInitParams);
}
private void GetFileMap(object[] parameters)
{
foreach (object obj in parameters) {
_fileMap = (obj as ConfigurationFileMap);
if (_fileMap != null)
break;
}
}
public override string GetStreamName(string configPath)
{
string streamName = base.GetStreamName(configPath);
if (ConfigPathUtility.GetName(configPath) == "MACHINE" && (_fileMap?.IsMachinePathDefault ?? true))
_machineStreamName = streamName;
return streamName;
}
public override Stream OpenStreamForRead(string streamName)
{
Stream stream = base.OpenStreamForRead(streamName);
if (stream == null && streamName == _machineStreamName)
stream = new MemoryStream(Encoding.UTF8.GetBytes("<configuration>\r\n <configSections>\r\n <section name='appSettings' type='System.Configuration.AppSettingsSection, System.Configuration.ConfigurationManager' restartOnExternalChanges='false' requirePermission='false' />\r\n <section name='connectionStrings' type='System.Configuration.ConnectionStringsSection, System.Configuration.ConfigurationManager' requirePermission='false' />\r\n <section name='mscorlib' type='System.Configuration.IgnoreSection, System.Configuration.ConfigurationManager' allowLocation='false' />\r\n <section name='runtime' type='System.Configuration.IgnoreSection, System.Configuration.ConfigurationManager' allowLocation='false' />\r\n <section name='assemblyBinding' type='System.Configuration.IgnoreSection, System.Configuration.ConfigurationManager' allowLocation='false' />\r\n <section name='satelliteassemblies' type='System.Configuration.IgnoreSection, System.Configuration.ConfigurationManager' allowLocation='false' />\r\n <section name='startup' type='System.Configuration.IgnoreSection, System.Configuration.ConfigurationManager' allowLocation='false' />\r\n <section name='system.diagnostics' type='System.Diagnostics.SystemDiagnosticsSection, System.Configuration.ConfigurationManager' allowLocation='false' />\r\n </configSections>\r\n <configProtectedData defaultProvider='RsaProtectedConfigurationProvider'>\r\n <providers>\r\n <add name = 'RsaProtectedConfigurationProvider' type='System.Configuration.RsaProtectedConfigurationProvider, System.Configuration.ConfigurationManager' description='Uses RsaCryptoServiceProvider to encrypt and decrypt' keyContainerName='NetFrameworkConfigurationKey' cspProviderName='' useMachineContainer='true' useOAEP='false' />\r\n <add name = 'DataProtectionConfigurationProvider' type='System.Configuration.DpapiProtectedConfigurationProvider, System.Configuration.ConfigurationManager' description='Uses CryptProtectData and CryptUnProtectData Windows APIs to encrypt and decrypt' useMachineProtection='true' keyEntropy='' />\r\n </providers>\r\n </configProtectedData>\r\n <connectionStrings>\r\n <add name = 'LocalSqlServer' connectionString='data source=.\\SQLEXPRESS;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|aspnetdb.mdf;User Instance=true' providerName='System.Data.SqlClient' />\r\n </connectionStrings>\r\n</configuration>"));
return stream;
}
}
}