一个大项目里可能会有非常多个配置参数,有.Net自己支持的配置(比如WCF,AppSettings),还有一部分是自定义的配置(比如继承自ConfigurationSection和ConfigurationElement的配置类),当然还有一部分是第三方类库的配置(其实也是自定义的配置,比如AOP框架Unity),当这些配置变得越来越多的时候,维护起来变得相当困难,特别是config文件内容相当的长和文件的容量过大,过大的文件在Config初始化读取文件时会带来性能影响,这个时候使用configSouce指定外部的文件,拆分成多个不同的文件存储配置,增强可读性和可维护性,降低出错的风险。

MSDN里提到了3点好处:

  • Using include files can result in a more logical and modular structure for configuration files.  (模块化管理文件)

  • File-access security and permissions can be used to restrict access to sections of configuration settings.  (可控制不同配置文件的访问权限)

  • Settings in an include file that are not used during application initialization can be modified and reloaded without requiring an application restart. (修改不在应用程序初始化时候使用的参数,不需要重启应用)

很多文章里都也已经说了关于ConfigSouce的用法,根据MSDN说明,ConfigSouce只能用于ConfigurationSection对应的节点,比如

<appSettings configSource="Config\\AppSettings\\appSettings.config">
</appSettings>

在appSettings.config里

<appSettings>
<add key="IOS" value=""/>
<add key="Android" value=""/>
</appSettings>

这里appSettings是定义在machine.config里configSection,这样.Net会自动找到对应文件。

对于appSettings,在Web.config里IDE会给你智能提示,告诉你它支持configSouce属性,但是有些不会,比如配置WCF服务的system.serviceModel/services节点,这种节点也是支持的,因为从machine.config里会看到,services也是一个ConfigurationSection

所以如下配置是正确的:

<services configSource="Config\\ServiceModel\\Services.config">
</services>

对于自定义的配置,或者第三方类库配置,因为都是继承了ConfigurationSection

所以如下配置也是正确的:

自定义的邮件相关配置

<VRentEmail configSource="Config\\VRentEmail\\VRentEmail.config">
</VRentEmail>

Unity的配置

<unity configSource="Config\\Unity\\Unity.config">
</unity>

使用了configSource后有一个明显的缺点就是,智能感知没有了

使用 ConfigSource 特性 拆分 Web.config 文件的更多相关文章

  1. Web.Config文件中使用configSource

    我们都知道,在asp.net中修改了配置文件web.config后,会导致应用程序重启,所有会话(session)丢失.然而,应用程序的配置信息放在配置文件里是最佳选择,在后台修改了配置后导致所有会话 ...

  2. 在Web.Config文件中使用configSource,避免动态修改web.config导致asp.net重启(另添加一个Config文件用于管理用户数据)

    原文:在Web.Config文件中使用configSource,避免动态修改web.config导致asp.net重启(另添加一个Config文件用于管理用户数据) 我们都知道,在asp.net中修改 ...

  3. 一步步开发自己的博客 .NET版(11、Web.config文件的读取和修改)

    Web.config的读取 对于Web.config的读取大家都很属性了.平时我们用得比较多的就是appSettings节点下配置.如: 我们对应的代码是: = ConfigurationManage ...

  4. .net中Web.config文件的基本原理及相关设置

    11.7  使用web.config配置文件 Web配置文件web.config是Web 应用程序的数据设定文件,它是一份 XML 文件,内含 Web 应用程序相关设定的 XML 标记,可以用来简化  ...

  5. 跨域Ajax请求 web.config文件配置

    在web.config文件的<system.webServer>节点下面添加如下配置代码:<!--允许跨域ajax访问--> <httpProtocol> < ...

  6. HTTP 错误 500.19 – Internal Server Error web.config 文件的 system.webServer/httpErrors 节中不允许绝对物理路径“C:\inetpub\custerr”[转]

    给ASP或者ASP.NET等需要配置IIS服务器的过程中,很可能会遇到以下两种错误.尤其是用Win7系统的,配置IIS7.0版本比用XP系统配置IIS5.1版本而言要复杂复杂一些.当同时需要配置ASP ...

  7. Web.config 文件中的 system.webServer

    Web.config 文件中的 system.webServer 节用于指定适用于 Web 应用程序的 IIS 7.0 设置.system.WebServer 是 configuration 节的子级 ...

  8. web.config文件中配置数据库连接的两种方式

    web.config文件中配置数据库连接的两种方式 标签: 数据库webconfig 2015-04-28 18:18 31590人阅读 评论(1)收藏举报    分类: 数据库(74)  在网站开发 ...

  9. .net 操作web.config文件

    XmlDocument doc = new XmlDocument(); string wc = HttpContext.Request.PhysicalApplicationPath + @&quo ...

随机推荐

  1. Clojure——学习迷宫生成

    背景 初学clojure,想着看一些算法来熟悉clojure语法及相关算法实现. 找到一个各种语言生成迷宫的网站:http://rosettacode.org/wiki/Maze_generation ...

  2. IFrame父页面和子页面的交互

    现在在页面里面用到iframe的情况越来越少了,但有时还是避免不了,甚至这些页面之间还需要用js来做交互,那么这些页面如何操作彼此的dom呢?下面将会逐步介绍. 1.父页面操作子页面里面的dom 下面 ...

  3. Python s12 Day3 笔记及作业

    1. Set集合 old_dict = { "#1":{ 'hostname':'c1', 'cpu_count':2, 'mem_capicity':16}, "#2& ...

  4. Django进阶篇【2】

    在学习之前,我们补充一个知识点(static用法) 创建APP 配置: setting.py STATICFILES_DIRS = ( os.path.join(BASE_DIR,'static') ...

  5. 使用dropload.js插件进行下拉刷新

    移动端的下拉刷新是一个比较常见的功能了,网上也有很多框架,插件都有这种功能,所以直接拿来用就好了. html代码: <!--选项卡--><div class="tab&qu ...

  6. c#字符编码,System.Text.Encoding类,字符编码大全:如Unicode编码、GB18030、UTF-8,UTF-7,GB2312,ASCII,UTF32,Big5

    本页列出来目前window下所有支持的字符编码  ---c#通过 System.Text.Encoding.GetEncodings()获取,里面可以对其进行查询,筛选,对同一个字符,在不同编码进行查 ...

  7. iOS开发工程师必备技能(持续更新)

    Objective-C Objective-C语言基础 library,framework的制作 Runtime 编程 LLVM 原理和调优 操作系统 iOS内存管理和调优 iOS的文件系统和沙盒机制 ...

  8. C# 剪贴板中文乱码问题

    最近写了个小工具.主要功能是生成一些数据,然后一键复制,最终粘贴到需要的地方. 本来一切正常的,可是当把工具拿给朋友使用时,却被告知粘贴出来的数据是乱码.当时第一时间想到是区域问题(朋友是台湾人),不 ...

  9. 在centos6上实现LAMP的FPM模式

    原理 http使用一次编译法编译安装,php独立服务fpm实现. 软件版本 在本次实验中,我们需要用到的软件版本如下: apr-1.6.2 apr-util-1.6.0 httpd-2.4.28 ma ...

  10. vue 从入门到精通(二)

    上一篇总结了一些vue的理论知识,如果你没看懂的话--那返回去继续去看啊!反正我要开始第二篇了. vue提供了大量的指令,比如:v-if,v-bind,v-on--太多,多写项目,多看API,这里就不 ...