You've already forked linux-packaging-mono
Imported Upstream version 4.6.0.125
Former-commit-id: a2155e9bd80020e49e72e86c44da02a8ac0e57a4
This commit is contained in:
parent
a569aebcfd
commit
e79aa3c0ed
@ -0,0 +1,314 @@
|
||||
//------------------------------------------------------------------------------
|
||||
// <copyright file="Configuration.cs" company="Microsoft">
|
||||
// Copyright (c) Microsoft Corporation. All rights reserved.
|
||||
// </copyright>
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
using ClassConfiguration = System.Configuration.Configuration;
|
||||
using System.Collections;
|
||||
using System.Configuration;
|
||||
using System.Configuration.Internal;
|
||||
using System.IO;
|
||||
using System.Reflection;
|
||||
using System.Security;
|
||||
using System.Security.Permissions;
|
||||
using System.Threading;
|
||||
using System.Runtime.Versioning;
|
||||
|
||||
namespace System.Configuration {
|
||||
|
||||
//
|
||||
// An instance of the Configuration class represents a single level
|
||||
// in the configuration hierarchy. Its contents can be edited and
|
||||
// saved to disk.
|
||||
//
|
||||
// It is not thread safe for writing.
|
||||
//
|
||||
public sealed class Configuration {
|
||||
private Type _typeConfigHost; // type of config host
|
||||
private object[] _hostInitConfigurationParams; // params to init config host
|
||||
private InternalConfigRoot _configRoot; // root of this configuration hierarchy
|
||||
private MgmtConfigurationRecord _configRecord; // config record for this level in the hierarchy
|
||||
private ConfigurationSectionGroup _rootSectionGroup; // section group for the root of all sections
|
||||
private ConfigurationLocationCollection _locations; // support for ConfigurationLocationsCollection
|
||||
private ContextInformation _evalContext; // evaluation context
|
||||
private Func<string, string> _TypeStringTransformer = null;
|
||||
private Func<string, string> _AssemblyStringTransformer = null;
|
||||
private bool _TypeStringTransformerIsSet = false;
|
||||
private bool _AssemblyStringTransformerIsSet = false;
|
||||
private FrameworkName _TargetFramework = null;
|
||||
private Stack _SectionsStack = null;
|
||||
|
||||
internal Configuration(string locationSubPath, Type typeConfigHost, params object[] hostInitConfigurationParams) {
|
||||
_typeConfigHost = typeConfigHost;
|
||||
_hostInitConfigurationParams = hostInitConfigurationParams;
|
||||
|
||||
_configRoot = new InternalConfigRoot(this);
|
||||
|
||||
IInternalConfigHost configHost = (IInternalConfigHost) TypeUtil.CreateInstanceWithReflectionPermission(typeConfigHost);
|
||||
|
||||
// Wrap the host with the UpdateConfigHost to support SaveAs.
|
||||
IInternalConfigHost updateConfigHost = new UpdateConfigHost(configHost);
|
||||
|
||||
((IInternalConfigRoot)_configRoot).Init(updateConfigHost, true);
|
||||
|
||||
//
|
||||
// Set the configuration paths for this Configuration.
|
||||
// We do this in a separate step so that the WebConfigurationHost
|
||||
// can use this object's _configRoot to get the <sites> section,
|
||||
// which is used in it's MapPath implementation.
|
||||
//
|
||||
string configPath, locationConfigPath;
|
||||
configHost.InitForConfiguration(ref locationSubPath, out configPath, out locationConfigPath, _configRoot, hostInitConfigurationParams);
|
||||
|
||||
if (!String.IsNullOrEmpty(locationSubPath) && !updateConfigHost.SupportsLocation) {
|
||||
throw ExceptionUtil.UnexpectedError("Configuration::ctor");
|
||||
}
|
||||
|
||||
if (String.IsNullOrEmpty(locationSubPath) != String.IsNullOrEmpty(locationConfigPath)) {
|
||||
throw ExceptionUtil.UnexpectedError("Configuration::ctor");
|
||||
}
|
||||
|
||||
// Get the configuration record for this config file.
|
||||
_configRecord = (MgmtConfigurationRecord) _configRoot.GetConfigRecord(configPath);
|
||||
|
||||
//
|
||||
// Create another MgmtConfigurationRecord for the location that is a child of the above record.
|
||||
// Note that this does not match the resolution hiearchy that is used at runtime.
|
||||
//
|
||||
if (!String.IsNullOrEmpty(locationSubPath)) {
|
||||
_configRecord = MgmtConfigurationRecord.Create(
|
||||
_configRoot, _configRecord, locationConfigPath, locationSubPath);
|
||||
}
|
||||
|
||||
//
|
||||
// Throw if the config record we created contains global errors.
|
||||
//
|
||||
_configRecord.ThrowIfInitErrors();
|
||||
}
|
||||
|
||||
//
|
||||
// Create a new instance of Configuration for the locationSubPath,
|
||||
// with the initialization parameters that were used to create this configuration.
|
||||
//
|
||||
internal Configuration OpenLocationConfiguration(string locationSubPath) {
|
||||
return new Configuration(locationSubPath, _typeConfigHost, _hostInitConfigurationParams);
|
||||
}
|
||||
|
||||
// public properties
|
||||
public AppSettingsSection AppSettings {
|
||||
get {
|
||||
return (AppSettingsSection) GetSection("appSettings");
|
||||
}
|
||||
}
|
||||
|
||||
public ConnectionStringsSection ConnectionStrings {
|
||||
get {
|
||||
return (ConnectionStringsSection) GetSection("connectionStrings");
|
||||
}
|
||||
}
|
||||
|
||||
public string FilePath {
|
||||
get {
|
||||
return _configRecord.ConfigurationFilePath;
|
||||
}
|
||||
}
|
||||
|
||||
public bool HasFile {
|
||||
get {
|
||||
return _configRecord.HasStream;
|
||||
}
|
||||
}
|
||||
|
||||
public ConfigurationLocationCollection Locations {
|
||||
get {
|
||||
if (_locations == null) {
|
||||
_locations = _configRecord.GetLocationCollection(this);
|
||||
}
|
||||
|
||||
return _locations;
|
||||
}
|
||||
}
|
||||
|
||||
public ContextInformation EvaluationContext {
|
||||
get {
|
||||
if (_evalContext == null) {
|
||||
_evalContext = new ContextInformation(_configRecord);
|
||||
}
|
||||
|
||||
return _evalContext;
|
||||
}
|
||||
}
|
||||
|
||||
public ConfigurationSectionGroup RootSectionGroup {
|
||||
get {
|
||||
if (_rootSectionGroup == null) {
|
||||
_rootSectionGroup = new ConfigurationSectionGroup();
|
||||
_rootSectionGroup.RootAttachToConfigurationRecord(_configRecord);
|
||||
}
|
||||
|
||||
return _rootSectionGroup;
|
||||
}
|
||||
}
|
||||
|
||||
public ConfigurationSectionCollection Sections {
|
||||
get {
|
||||
return RootSectionGroup.Sections;
|
||||
}
|
||||
}
|
||||
|
||||
public ConfigurationSectionGroupCollection SectionGroups {
|
||||
get {
|
||||
return RootSectionGroup.SectionGroups;
|
||||
}
|
||||
}
|
||||
|
||||
// public methods
|
||||
public ConfigurationSection GetSection(string sectionName) {
|
||||
ConfigurationSection section = (ConfigurationSection) _configRecord.GetSection(sectionName);
|
||||
|
||||
return section;
|
||||
}
|
||||
|
||||
public ConfigurationSectionGroup GetSectionGroup(string sectionGroupName) {
|
||||
ConfigurationSectionGroup sectionGroup = _configRecord.GetSectionGroup(sectionGroupName);
|
||||
|
||||
return sectionGroup;
|
||||
}
|
||||
|
||||
// NamespaceDeclared
|
||||
//
|
||||
// Is the namespace declared in the file or not?
|
||||
//
|
||||
// ie. xmlns="http://schemas.microsoft.com/.NetConfiguration/v2.0"
|
||||
// (currently this is the only one we allow)
|
||||
//
|
||||
// get - Return if it was declared in the file.
|
||||
// set - Set if we should save the namespace or not
|
||||
//
|
||||
public bool NamespaceDeclared {
|
||||
get {
|
||||
return _configRecord.NamespacePresent;
|
||||
}
|
||||
set {
|
||||
_configRecord.NamespacePresent = value;
|
||||
}
|
||||
}
|
||||
|
||||
public void Save() {
|
||||
SaveAsImpl(null, ConfigurationSaveMode.Modified, false);
|
||||
}
|
||||
|
||||
public void Save(ConfigurationSaveMode saveMode) {
|
||||
SaveAsImpl(null, saveMode, false);
|
||||
}
|
||||
|
||||
public void Save(ConfigurationSaveMode saveMode, bool forceSaveAll) {
|
||||
SaveAsImpl(null, saveMode, forceSaveAll);
|
||||
}
|
||||
|
||||
public void SaveAs(string filename) {
|
||||
SaveAs(filename, ConfigurationSaveMode.Modified, false);
|
||||
}
|
||||
|
||||
public void SaveAs(string filename, ConfigurationSaveMode saveMode) {
|
||||
SaveAs(filename, saveMode, false);
|
||||
}
|
||||
|
||||
public void SaveAs(string filename, ConfigurationSaveMode saveMode, bool forceSaveAll) {
|
||||
if (String.IsNullOrEmpty(filename)) {
|
||||
throw ExceptionUtil.ParameterNullOrEmpty("filename");
|
||||
}
|
||||
|
||||
SaveAsImpl(filename, saveMode, forceSaveAll);
|
||||
}
|
||||
|
||||
private void SaveAsImpl(string filename, ConfigurationSaveMode saveMode, bool forceSaveAll) {
|
||||
if (String.IsNullOrEmpty(filename)) {
|
||||
filename = null;
|
||||
}
|
||||
else {
|
||||
filename = System.IO.Path.GetFullPath(filename);
|
||||
}
|
||||
|
||||
if (forceSaveAll) {
|
||||
ForceGroupsRecursive(RootSectionGroup);
|
||||
}
|
||||
_configRecord.SaveAs(filename, saveMode, forceSaveAll);
|
||||
}
|
||||
|
||||
// Force all sections and section groups to be instantiated.
|
||||
private void ForceGroupsRecursive(ConfigurationSectionGroup group) {
|
||||
foreach (ConfigurationSection configSection in group.Sections) {
|
||||
// Force the section to be read into the cache
|
||||
ConfigurationSection section = group.Sections[configSection.SectionInformation.Name];
|
||||
}
|
||||
|
||||
foreach (ConfigurationSectionGroup sectionGroup in group.SectionGroups) {
|
||||
ForceGroupsRecursive(group.SectionGroups[sectionGroup.Name]);
|
||||
}
|
||||
}
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
public System.Func<string, string> TypeStringTransformer {
|
||||
get {
|
||||
return _TypeStringTransformer;
|
||||
}
|
||||
[ConfigurationPermission(SecurityAction.Demand, Unrestricted=true)]
|
||||
set {
|
||||
if (_TypeStringTransformer != value) {
|
||||
_TypeStringTransformerIsSet = (value != null);
|
||||
_TypeStringTransformer = value;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
public System.Func<string, string> AssemblyStringTransformer {
|
||||
get {
|
||||
return _AssemblyStringTransformer;
|
||||
}
|
||||
[ConfigurationPermission(SecurityAction.Demand, Unrestricted=true)]
|
||||
set {
|
||||
if (_AssemblyStringTransformer != value) {
|
||||
_AssemblyStringTransformerIsSet = (value != null);
|
||||
_AssemblyStringTransformer = value;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
public FrameworkName TargetFramework {
|
||||
get {
|
||||
return _TargetFramework;
|
||||
}
|
||||
[ConfigurationPermission(SecurityAction.Demand, Unrestricted=true)]
|
||||
set {
|
||||
_TargetFramework = value;
|
||||
}
|
||||
}
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
internal bool TypeStringTransformerIsSet { get { return _TypeStringTransformerIsSet; }}
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
internal bool AssemblyStringTransformerIsSet { get { return _AssemblyStringTransformerIsSet; }}
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
internal Stack SectionsStack {
|
||||
get {
|
||||
if (_SectionsStack == null)
|
||||
_SectionsStack = new Stack();
|
||||
return _SectionsStack;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user