38、C#:app.config详述

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/xushaozhang/article/details/78263501

1. 下文对应的各种配置节绝大部分都可以在中MSDN中找到,地址:https://msdn.microsoft.com/zh-cn/library/ms229207(v=vs.80).aspx     


2. 我的配置

<?xml version="1.0"?>
<!--配置文件的功能:一些可能变动的变量可以在此文件中写成全局配置值,这些变量发生变化无需修改、编译以及重新发布程序;  缺陷:配置值无类型,无法被编译器验证-->
<configuration>
  <!--configSections元素为自定义配置节区域:没有在此声明的自定义节点系统无法通过; 若配置文件中包含 configSections 元素,则其必须是 configuration 元素的第一个子元素-->
  <configSections>
    <!-- Expo中使用 -->
    <!--type格式=" Fully qualified class name , assembly file name , version , culture , public key token "-->
    <!--commSection由xxx.Comm.dll读取,log4net由log4net.dll读取,全部在程序启动的时候由相关dll读取对应配置-->
    <section name="commSection" type="xxx.Comm.CommSection, xxx.Comm" />
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />
    
    <!--sectionGroup元素充当section元素的容器,可对section元素进行逻辑分组,同时避免命名冲突-->
    <sectionGroup name="applicationSettings" type="System.Configuration.ApplicationSettingsGroup, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
      <!--section元素将配置节处理程序与配置元素关联,type格式=" Fully qualified class name , assembly file name , version , culture , public key token "-->
      <section name="xxx.Aegis.xxx.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
    </sectionGroup>

    <!--在项目下的properties下面打开一个settings设置文件,则会自动生成下面的sectionGroup元素,并在本文件最后新增之前设置的类型和值,即<userSettings>-->
    <sectionGroup name="userSettings" type="System.Configuration.UserSettingsGroup, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" >
      <section name="xxx.BlackList.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" allowExeDefinition="MachineToLocalUser" requirePermission="false" />
    </sectionGroup>
  </configSections>

  <!--自定义第三方元素,由xxx.Comm.dll中进行字段的定义,名称不能随意写-->
  <commSection apiDefine="apiDefine.xml" mbUrl="AppConfig.xml" timeOut="600000" />

  <!--定义全局配置值,方便程序读取-->
  <appSettings>
    <!--是否启用某项服务-->
    <add key="Enable" value="false"/>
  </appSettings>


  <!--connectionStrings元素为ASP.NET指定数据库连接字符串的集合,好处:1.可将连接字符串加密,使用MS的一个加密工具即可;2.可直接邦定的数据源控件,而不必写代码读出来再赋值给控件;
                                                              3.可方便的更换数据库平台,如换为Oracle数据库,只需修改providerName: 此处引自博客:http://www.cnblogs.com/bindot/archive/2013/03/07/def.html-->
  <connectionStrings>
    <add name="xxxntities" connectionString="DATA SOURCE=ORCL;USER ID=xxx;PASSWORD=xxx;" providerName="System.Data.EntityClient" />
  </connectionStrings>


  <!--包含有关远程对象和信道的信息-->
  <system.runtime.remoting>
    <!--包含有关应用程序使用和公开的远程对象的信息-->
    <application>
      <!--包含应用程序使用的对象-->
      <client>
        <!--包含有关应用程序要使用的服务器激活(已知)对象的信息: type: 指定对象的完整类型名和客户端的类型实现的程序集名称。如果包含程序集在全局程序集缓存中,则包括版本、区域性和公钥信息; 
                                                        url: 指定服务器激活类型的完整 URL,包括对象的统一资源标识符 (URI)-->
        <wellknown type="xxx.Aegis.ComSystem.ExpoProxy.NoticeProxyService, xxx.Aegis.ComSystem.ExpoProxy" url="tcp://xxx/NoticeProxyService.rem" />
        <wellknown type="xxx.FileSync.IFileSync.IFtpUserInfoSync, xxx.FileSync.IFileSync_Net35" url="tcp://xxx/CommonClass" />
      </client>
      <!--包含应用程序用来与远程对象进行通信的信道模板。在此元素下声明的信道可用于引用注册了信道的任何位置。-->
      <channels>
        <!--配置应用程序用来与远程对象进行通信的信道。还可以声明和配置一个不是信道模板的新信道:ref: 指示客户端要注册以供使用的信道模板的id;  
                        port:指示一个合适的端口属性。例如,如果希望信道在某个端口上侦听,可以在此指定端口属性。某些信道(如 TcpChannel)需要端口规范。其他信道(如 HttpChannel)具有默认端口,所以不需要此属性。
                        如果正在生成客户端,并将 0(零)指定为端口,则 .NET Framework 远程处理系统将为您选择一个合适的端口。如果没有为客户端信道指定端口,则客户端将无法接收来自远程对象的回调函数。-->
        <channel ref="tcp" port="0">
          <!--包含可插入客户端信道调用链中的信道接收器模板-->
          <clientProviders>
            <!--包含要插入信道接收器链的格式化程序接收器的信道接收器提供程序。-->
            <formatter ref="binary" typeFilterLevel="Full" />
          </clientProviders>
        </channel>
      </channels>
      <client>
      </client>
    </application>
  </system.runtime.remoting>


  <!--自定义第三方元素,由log4net.dll中进行读取-->
  <log4net>
    <root>
    </root>
    <!--定义日志的输出媒介-->
    <logger name="SysLogger">
      <!--最多一个。 只有在这个级别或之上的事件才会被记录。-->
      <level value="ALL" />
      <!--要引用的appender的名字-->
      <appender-ref ref="SysLogFileAppender" />
      <appender-ref ref="SysLogErrorFileAppender" />
    </logger>

    <!--定义日志的输出方式,只能作为 log4net 的子元素。name:必须的,Appender对象的名称,必须唯一;  type:必须的,Appender对象的输出类型,必须指定。-->
    <appender name="SysLogFileAppender" type="log4net.Appender.RollingFileAppender,log4net">
      <!--下列param:定义文件存放的路径,这里为相对路径-->
      <param name="File" value="LogFiles\" />
      <!--下列param:是否追加到文件-->
      <param name="AppendToFile" value="true" />
      <!--下列param:按照何种方式产生多个日志文件(日期[Date],文件大小[Size],混合[Composite])-->
      <param name="RollingStyle" value="Composite"/>
      <!--下列param:这是先按日期产生文件夹,再形成下一级固定的文件夹-->
      <param name="DatePattern" value="yyyyMM\\yyyyMMdd'SysLog.txt'" />
      <!--下列param:最多产生的日志文件数,超过则只保留最新的n个。设定值value="-1"为不限文件数-->
      <param name="MaxSizeRollBackups" value="10"/>
      <!--下列param:每个文件的大小。只在混合方式与文件大小方式下使用。超出大小后在所有文件名后自动增加正整数重新命名,数字最大的最早写入。可用的单位:KB|MB|GB。不要使用小数,否则会一直写入当前日志-->
      <param name="MaximumFileSize" value="5120KB"/>
      <!--下列param:是否只写到一个文件中-->
      <param name="StaticLogFileName" value="false"/>

      <!--记录的格式。一般用log4net.Layout.PatternLayout布局-->
      <layout type="log4net.Layout.PatternLayout,log4net">
        <!--value="date{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %message%newline"-->
        <param name="ConversionPattern" value="%d{yyyy-MM-dd HH:mm:ss} [%t] %-5p %m%n" />
      </layout>

      <!--过滤设置,LevelRangeFilter为使用的过滤器:输出级别在DEBUG和WARN之间的日志-->
      <filter type="log4net.Filter.LevelRangeFilter">
        <param name="LevelMin" value="DEBUG" />
        <param name="LevelMax" value="WARN" />
      </filter>
    </appender>

    <appender name="SysLogErrorFileAppender" type="log4net.Appender.RollingFileAppender,log4net">
      <param name="File" value="LogFiles\" />
      <param name="AppendToFile" value="true" />
      <param name="RollingStyle" value="Composite"/>
      <param name="DatePattern" value="yyyyMM\\yyyyMMdd'SysLog_error.txt'" />
      <param name="MaxSizeRollBackups" value="10"/>
      <param name="MaximumFileSize" value="5120KB"/>
      <param name="StaticLogFileName" value="false"/>
      <layout type="log4net.Layout.PatternLayout,log4net">
        <param name="ConversionPattern" value="%d{yyyy-MM-dd HH:mm:ss} [%t] %-5p %m%n" />
      </layout>
      <filter type="log4net.Filter.LevelRangeFilter">
        <param name="LevelMin" value="ERROR" />
        <param name="LevelMax" value="FATAL" />
      </filter>
    </appender>
  </log4net>

  <!--数据库EF映射关系,非托管-->
  <oracle.dataaccess.client>
    <settings>
      <add name="byte" value="edmmapping number(3,0)" />
      <add name="int16" value="edmmapping number(5,0)" />
      <add name="int32" value="edmmapping number(10,0)" />
      <add name="int64" value="edmmapping number(19,0)" />
    </settings>
  </oracle.dataaccess.client>

  <!--数据库EF映射关系,托管-->
  <oracle.manageddataaccess.client>
    <version number="4.121.1.0">
      <edmMappings>
        <edmMapping dataType="number">
          <add name="byte" precision="3" />
          <add name="int16" precision="5" />
          <add name="int32" precision="10" />
          <add name="int64" precision="19"/>
        </edmMapping>
      </edmMappings>
    </version>
  </oracle.manageddataaccess.client>


  <startup>
    <!--指定此应用程序支持的公共语言运行库版本-->
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0" />
  </startup>


  <!--包含有关程序集绑定和垃圾回收的信息-->
  <runtime>
    <!--assemblyBinding元素:包含有关程序集版本重定向和程序集位置的信息-->
    <!--   ????  如何得到参数-->
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <!--封装每个程序集的绑定策略和程序集位置-->
      <dependentAssembly>
        <!--包含关于该程序集的标识信息; 此元素必须包含在每个 dependentAssembly 元素中-->
        <assemblyIdentity name="ICSharpCode.SharpZipLib" publicKeyToken="1B03E6ACF1164F73" culture="neutral" />
        <!--将一个程序集版本重定向到另一个版本-->
        <bindingRedirect oldVersion="0.0.0.0-0.85.1.271" newVersion="0.85.1.271" />
      </dependentAssembly>
    </assemblyBinding>
  </runtime>


  <!--数据库相关,管理用户,用户组等,需要进行数据库的配置-->
  <!--指定ASP.NET配置节的根元素,并包含用于配置 ASP.NET Web 应用程序和控制应用程序行为的配置元素-->
  <system.web>
    <!--使用ASP.NET成员资格配置用于对用户帐户进行管理和身份验证的参数-->
    <membership defaultProvider="ClientAuthenticationMembershipProvider">
      <!--定义成员资格提供程序的集合-->
      <providers>
        <add name="ClientAuthenticationMembershipProvider" type="System.Web.ClientServices.Providers.ClientFormsAuthenticationMembershipProvider, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" serviceUri="" />
      </providers>
    </membership>
    <!--roleManager元素功能;为角色管理配置应用程序-->
    <roleManager defaultProvider="ClientRoleProvider" enabled="true">
      <!--为角色管理定义一个角色提供程序的集合,可选-->
      <providers>
        <!--向角色管理提供程序集合添加一个角色提供程序实例-->
        <add name="ClientRoleProvider" type="System.Web.ClientServices.Providers.ClientRoleProvider, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" serviceUri="" cacheTimeout="86400" />
      </providers>
    </roleManager>
  </system.web>


  <!--serviceModel相关,引用了System.ServiceModel.dll,这里表示简约绑定,使用场景例如WCF配置等-->
  <system.serviceModel>
    <bindings />
    <client />
  </system.serviceModel>


  <!--webservice相关,使用了System.Web.Service.dll,value为一个webservice地址,里面使用xml(并用http封装)写了很多接口(跨平台),这样上层直接调用,不用管下层如何实现-->
  <applicationSettings>
    <xxx.Aegis.xxx.Properties.Settings>
      <setting name="xxx_Aegis_xxxService_TTInterface_TTWebService" serializeAs="String">
        <value>http://xxx/WindEIP/TT/Webservice/TTWebService.asmx</value>
      </setting>
    </xxx.Aegis.xxx.Properties.Settings>
  </applicationSettings>

  <userSettings>
    <xxx.BlackList.Properties.Settings>
      <setting name="K1" serializeAs="String">
        <value>aaa</value>
      </setting>
      <setting name="K2" serializeAs="String">
        <value>bbb</value>
      </setting>
      <setting name="Setting1" serializeAs="String">
        <value>0</value>
      </setting>
    </xxx.BlackList.Properties.Settings>
  </userSettings>
  
</configuration>

3. app.config文件的读取



本文app.config文件释义参考了以下文章

1.   MSDN架构设置      地址:https://msdn.microsoft.com/zh-cn/library/ms229207(v=vs.80).aspx

2.  C# 读写App.config配置文件的方法     地址:http://www.cnblogs.com/feiyuhuo/p/5243967.html(关于appSettings等)

3.  Web.config配置文件详解(新手必看)    地址:http://www.cnblogs.com/gaoweipeng/archive/2009/05/17/1458762.html

4. configSections    地址:http://www.cnblogs.com/jhxk/articles/1609182.html

5. C#中ConnectionStrings和AppSettings的区别    地址:http://www.cnblogs.com/bindot/archive/2013/03/07/def.html

猜你喜欢

转载自blog.csdn.net/xushaozhang/article/details/78263501
今日推荐