| File: System\Configuration\ImplicitMachineConfigHost.cs | Web Access |
| Project: src\runtime\src\libraries\System.Configuration.ConfigurationManager\src\System.Configuration.ConfigurationManager.csproj (System.Configuration.ConfigurationManager) |
// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. using System.Configuration.Internal; using System.IO; using System.Text; namespace System.Configuration { internal sealed class ImplicitMachineConfigHost : DelegatingConfigHost { private string _machineStreamName; private ConfigurationFileMap _fileMap; internal ImplicitMachineConfigHost(IInternalConfigHost host) { // Delegate to the host provided. Host = host; } public override void InitForConfiguration(ref string locationSubPath, out string configPath, out string locationConfigPath, IInternalConfigRoot configRoot, params object[] hostInitConfigurationParams) { // Stash the filemap so we can see if the machine config was explicitly specified GetFileMap(hostInitConfigurationParams); base.InitForConfiguration(ref locationSubPath, out configPath, out locationConfigPath, configRoot, hostInitConfigurationParams); } public override void Init(IInternalConfigRoot configRoot, params object[] hostInitParams) { // Stash the filemap so we can see if the machine config was explicitly specified GetFileMap(hostInitParams); base.Init(configRoot, hostInitParams); } private void GetFileMap(object[] parameters) { foreach (object parameter in parameters) { _fileMap = parameter as ConfigurationFileMap; if (_fileMap != null) return; } } public override string GetStreamName(string configPath) { string name = base.GetStreamName(configPath); if (ConfigPathUtility.GetName(configPath) == ClientConfigurationHost.MachineConfigName && (_fileMap?.IsMachinePathDefault ?? true)) { // The machine config was asked for and wasn't explicitly // specified, stash the "default" machine.config path _machineStreamName = name; } return name; } public override Stream OpenStreamForRead(string streamName) { Stream stream = base.OpenStreamForRead(streamName); if (stream == null && streamName == _machineStreamName) { // We only want to inject if we aren't able to load stream = new MemoryStream(Encoding.UTF8.GetBytes(ImplicitMachineConfig)); } return stream; } private const string ImplicitMachineConfig = @"<configuration> <configSections> <section name='appSettings' type='System.Configuration.AppSettingsSection, System.Configuration.ConfigurationManager' restartOnExternalChanges='false' requirePermission='false' /> <section name='connectionStrings' type='System.Configuration.ConnectionStringsSection, System.Configuration.ConfigurationManager' requirePermission='false' /> <section name='mscorlib' type='System.Configuration.IgnoreSection, System.Configuration.ConfigurationManager' allowLocation='false' /> <section name='runtime' type='System.Configuration.IgnoreSection, System.Configuration.ConfigurationManager' allowLocation='false' /> <section name='assemblyBinding' type='System.Configuration.IgnoreSection, System.Configuration.ConfigurationManager' allowLocation='false' /> <section name='satelliteassemblies' type='System.Configuration.IgnoreSection, System.Configuration.ConfigurationManager' allowLocation='false' /> <section name='startup' type='System.Configuration.IgnoreSection, System.Configuration.ConfigurationManager' allowLocation='false' />" + #if NET @" <section name='system.diagnostics' type='System.Diagnostics.SystemDiagnosticsSection, System.Configuration.ConfigurationManager' allowLocation='false' />" + #endif @" <section name='system.runtime.remoting' type='System.Configuration.IgnoreSection, System.Configuration.ConfigurationManager' allowLocation='false' /> <section name='windows' type='System.Configuration.IgnoreSection, System.Configuration.ConfigurationManager' allowLocation='false' /> </configSections> <configProtectedData defaultProvider='RsaProtectedConfigurationProvider'> <providers> <add name = 'RsaProtectedConfigurationProvider' type='System.Configuration.RsaProtectedConfigurationProvider, System.Configuration.ConfigurationManager' description='Uses RsaCryptoServiceProvider to encrypt and decrypt' keyContainerName='NetFrameworkConfigurationKey' cspProviderName='' useMachineContainer='true' useOAEP='false' /> <add name = 'DataProtectionConfigurationProvider' type='System.Configuration.DpapiProtectedConfigurationProvider, System.Configuration.ConfigurationManager' description='Uses CryptProtectData and CryptUnProtectData Windows APIs to encrypt and decrypt' useMachineProtection='true' keyEntropy='' /> </providers> </configProtectedData> <connectionStrings> <add name = 'LocalSqlServer' connectionString='data source=.\SQLEXPRESS;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|aspnetdb.mdf;User Instance=true' providerName='System.Data.SqlClient' /> </connectionStrings> </configuration>"; } }