.NET环境下Configuration 与ConfigurationManager/ AppSettings 与 ConfigSections探讨

关于配置文件的设置,读取有不少细节需要注意的。

A  一般情况下,配置文档会默认使用其下的AppSettings属性中的值。

 以下为普通的VB代码实现方式: 

        Dim exeFileMap As ExeConfigurationFileMap = New ExeConfigurationFileMap()

        exeFileMap.ExeConfigFilename = configFilePath

        Dim configCache As Configuration 
= ConfigurationManager.OpenMappedExeConfiguration(exeFileMap, ConfigurationUserLevel.None)  

        Dim rtnValue = configCache.AppSettings.Settings(strKey).Value

B 对于客户自定义的Section必须放在configSections中,在读取这些Section过程时。

需要根据App.Config文件路径,进行判断。

    (1) 对于默认路径下App.Config, 可以直接用

     Dim nb As System.Collections.Hashtable
= CType(System.Configuration.ConfigurationManager.GetSection("MajorCommands"), _

System.Collections.Hashtable)

     Dim rtnValue = nb(strkey) 

    (2) 对于人为定义的路径,即A中的情况

        Dim myParamsSection As ConfigurationSection = configCache.GetSection("USERSECTION")

        Dim myParamsSectionRawXml As String = myParamsSection.SectionInformation.GetRawXml()
        Dim sectionXmlDoc As Xml.XmlDocument = New Xml.XmlDocument()
        sectionXmlDoc.Load(New StringReader(myParamsSectionRawXml))
        Dim handler As NameValueSectionHandler = New NameValueSectionHandler()
        Dim handlerCreatedCollection As Specialized.NameValueCollection
        handlerCreatedCollection = CType(handler.Create(Nothing, Nothing, sectionXmlDoc.DocumentElement), Specialized.NameValueCollection)
        If Not handlerCreatedCollection.AllKeys.Contains(key) Then
            Return defaultData
        Else
            Return handlerCreatedCollection(key)
        End If

 配置文件中需要增加

  <configSections>
    <section name ="USERSECTION"
             type ="System.Configuration.DictionarySectionHandler" />
  </configSections>

 <appSettings></appSettings>

 <USERSECTION>
    <!--Customize-->
    <add key ="key1" value ="SHINSHO"/>
    <add key ="key2" value ="SOJITZ"/>
    <add key ="key3" value ="SUMITOMO"/>
    <add key ="key4" value ="MITSUBISHI  ELECTRIC"/>
    <add key ="key5" value ="MITSUBISHI"/>
  </USERSECTION>

         

 当然,如果直接用XML读取控件,来实现也能达到同样的效果。

如果再有疑惑,请直接阅读微软的源代码

 https://referencesource.microsoft.com/#System.Configuration 

Love it, and you live without it
原文地址:https://www.cnblogs.com/tomclock/p/7215880.html