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

Posted tomclock

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了.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 



以上是关于.NET环境下Configuration 与ConfigurationManager/ AppSettings 与 ConfigSections探讨的主要内容,如果未能解决你的问题,请参考以下文章

csharp medium_net_core_configuration_configure_services.cs

log4net配置与初始化

配置oracle Net Configuration Assistant时报以下错误 请问怎么

.Net 3.5 中的 Configuration.Save() 在部署/发布模式下不起作用

急!Configuration Error问题.net高手请指点下

ASP.NET Core 1.0 Configuration 配置管理