NameValueFileSectionHandler.cs source code in C# .NET

Source code for the .NET framework in C#

                        

Code:

/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / fx / src / Sys / System / Configuration / NameValueFileSectionHandler.cs / 1305376 / NameValueFileSectionHandler.cs

                            //------------------------------------------------------------------------------ 
// 
//     Copyright (c) Microsoft Corporation.  All rights reserved.
// 
//----------------------------------------------------------------------------- 

namespace System.Configuration { 
    using System.Configuration.Internal; 
    using System.IO;
    using System.Xml; 
    using System.Runtime.Versioning;

    /// 
    ///  
    /// 
    /// This section handler allows <appSettings file="user.config" /> 
    /// The file pointed to by the file= attribute is read as if it is 
    /// an appSettings section in the config file.
    /// Note: the user.config file must have its root element match the 
    /// section referring to it.  So if appSettings has a file="user.config"
    /// attribute the root element in user.config must also be named appSettings.
    /// 
    ///  
    public class NameValueFileSectionHandler : IConfigurationSectionHandler {
 
        [ResourceExposure(ResourceScope.None)] 
        [ResourceConsumption(ResourceScope.Machine, ResourceScope.Machine)]
        public object Create(object parent, object configContext, XmlNode section) { 
            object result = parent;

            // parse XML
            XmlNode fileAttribute = section.Attributes.RemoveNamedItem("file"); 

            result = NameValueSectionHandler.CreateStatic(result, section); 
 
            if (fileAttribute != null && fileAttribute.Value.Length != 0) {
                string filename = null; 
                filename = fileAttribute.Value;
                IConfigErrorInfo configXmlNode = fileAttribute as IConfigErrorInfo;
                if (configXmlNode == null) {
                    return null; 
                }
 
                string configFile = configXmlNode.Filename; 
                string directory = Path.GetDirectoryName(configFile);
                string sourceFileFullPath = Path.Combine(directory, filename); 

                if (File.Exists(sourceFileFullPath)) {

                    ConfigXmlDocument doc = new ConfigXmlDocument(); 
                    try {
                        doc.Load(sourceFileFullPath); 
                    } 
                    catch (XmlException e) {
                        throw new ConfigurationErrorsException(e.Message, e, sourceFileFullPath, e.LineNumber); 
                    }

                    if (section.Name != doc.DocumentElement.Name) {
                        throw new ConfigurationErrorsException( 
                                        SR.GetString(SR.Config_name_value_file_section_file_invalid_root, section.Name),
                                        doc.DocumentElement); 
                    } 

                    result = NameValueSectionHandler.CreateStatic(result, doc.DocumentElement); 
                }
            }

            return result; 
        }
    } 
} 

// File provided for Reference Use Only by Microsoft Corporation (c) 2007.


                        

Link Menu

Network programming in C#, Network Programming in VB.NET, Network Programming in .NET
This book is available now!
Buy at Amazon US or
Buy at Amazon UK