ASP.NET 通过在应用程序的任意目录保存配置文件的方式实现 ASP.NET 配置文件的层次继承化管理。这种结构允许开发者对应用程序特定目录进行更细节化的配置,并且配置结果不会影响到更高层的目录级别。

本文包含下列内容:

  • 配置结构

  • 配置继承

  • 配置的作用范围

  • 运行时的配置计算

  • 在同一个文件中配置多个 ASP.NET 资源

  • 虚拟路径和物理路径之间的配置冲突

  • 限制 ASP.NET 的配置继承

配置结构

ASP.NET 的配置文件被称为 Web.config 文件,该文件可以在 ASP.NET 应用程序的多个目录中同时出现。同时,ASP.NET 的配置层次还具有下列特性:

  • 配置文件可以应用于同一目录和子目录中的各种资源。

  • 可以根据需要应用不同的配置作用范围(整台计算机,所有 Web 应用程序,单个应用程序,或应用程序中的某个目录),并设置各种类型的配置数据。

  • 由配置层次中从更高级别继承来的配置允许被重载,也允许对配置的锁定以防止来自于低级别配置的覆盖。

  • 对配置进行组织并按逻辑分组成为不同的配置段。

配置继承

所有 .NET Framework 应用程序都会继承最基本的配置和 系统目录\Microsoft .NET\Framework\版本号\CONFIG\Machine.config 文件的默认配置。而 Machine.config 文件则用于整个服务器的配置。另外,配置文件层次中还有一些不能被覆盖的配置段。

.NET 客户应用程序(控制台应用程序和 Windows 应用程序)使用以 应用程序名.config 格式命名的配置文件来覆盖被继承的默认配置。ASP.NET 应用程序则使用名为 Web.config 的文件对被继承的配置进行覆盖。

ASP.NET 配置层次的根是一个作为根被引用的 Web.config 文件,该文件和 Machine.config 文件位于同一个目录中。根 Web.config 文件继承了 Machine.config 文件中的所有配置。根 Web.config 文件也包括应用于特定版本的 .NET Framework 环境中运行的所有 ASP.NET 应用程序的配置。因为每个 ASP.NET 应用程序都从根 Web.config 文件中继承默认的配置,所以开发者需要创建新的 Web.config 文件以覆盖默认配置。

元素集合的继承

有些配置元素是以集合的方式存在的:如 namespaces 元素和 customErrors 元素。

集合中的配置通常使用 add 子元素才能够添加到集合中,并通过 remove 子元素使用关键字进行删除,或者为整个集合使用 clear 子元素进行全部清空。添加在子配置文件中的配置会覆盖掉父配置文件中的同名配置,除非允许对配置进行复制。

提示:一些存在于较早版本的 .NET Framework 中的集合为 add 元素中使用不同的元素名称。比如,customErrors 元素使用的是 error 子元素为集合添加自定义错误。

如果 SubDir1 目录中被请求的文件并不存在,ASP.NET 就会先从局部 Web.config 文件(定位于当前目录,如果不存在则定位于父目录)的位置开始对配置层次进行搜索。ASP.NET 将会搜索 customErrrors 元素中 statusCode 参数值为 "404"error 元素。一旦找到该 404 号错误的配置,那么就返回设置在 redirect 参数中的值。

配置的作用范围

配置的作用范围也有多种:如全局范围、当前应用程序范围、根 Web.config 文件、或 Machine.config 文件。

ASP.NET 包含的 Machine.config 文件定义所有配置段的作用范围,所有配置段被定义在 configSections section 子元素的 allowDefinition 参数中。比如,authentication 元素中含有 allowDefinition 参数的 MachineToApplication 子元素,表示 authentication 元素可以分别在 Machine.config 文件、根 Web.config 文件、或应用程序级别的 Web.config 文件中进行配置。当该元素设置在子目录级别时会产生一个错误。如果没有定义配置段的 allowDefinition 参数,那么就会使用默认值 Everywhere

下表列出位于不同配置层次的文件级别、文件名、以及对重要继承特性的描述。

配置级别 文件名 文件描述

服务器

Machine.config

Machine.config 文件包含服务器所有 Web 应用程序的配置结构。该文件位于配置层次的最顶层。

所有 Web 站点

Web.config

服务器的 Web.config 文件与 Machine.config 位于同一目录中,并且包含 system.web 配置段中的大部分默认值。该文件在运行时被合并到配置层次的第二层。

单个 Web 站点

Web.config

特定 Web 站点的 Web.config 文件,包含了网站子应用程序和子目录的配置。

ASP.NET 应用程序根目录

Web.config

特定 ASP.NET 应用程序的 Web.config 文件,位于应用程序根目录,且包含了应用于 Web 应用和所有子目录的配置。

ASP.NET 应用程序子目录

Web.config

应用程序子目录的 Web.config 文件,包含了应用于目录本身和下级子目录的配置。

客户应用程序目录

应用程序名.config

应用程序名.config 文件包含了 Windows 客户应用程序(非 Web 应用程序)的配置。

ProcessModel 元素

processModel 元素用于配置服务器处理模型,包括服务器中的所有 ASP.NET 应用程序。因此,processModel 配置只能够放在 Machine.config 文件中,并且无法被任何 Web.config 文件覆盖。

与其他配置元素不同的是,对 processModel 元素的更改只会在工作者进程重新启动时才会生效。

提示:当 ASP.NET 在 Internet Information Services(IIS)6.0 的工作者进程隔离模式下运行时会使用 IIS 6.0 的默认进程模型,并忽略 Machine.config 文件中的 processModel 配置段。如果要配置进程的唯一性、可回收性、或使用其他的进程模型时,请使用 IIS 管理器为应用程序配置 IIS 工作者进程。

运行时的配置计算

当服务器接收到对特定 Web 资源的请求时,ASP.NET 会计算并合并资源的配置层次,甚至为 URL 请求动用所有虚拟路径下的配置文件。当然,局部配置会对父配置文件的配置进行覆盖。

配置层次在第一次计算之后随即被缓存起来用于其他并发请求的服务。ASP.NET 还自动监视文件并在这些文件被更改之后对其进行重新编译并缓存。在服务器接收到特定的 URL 请求时,ASP.NET 会优先从已缓存的配置层次中找出相应的被请求资源。

应用程序会在配置被更改之后自动重新启动,除非配置段元素中包括 restartOnExternalChanges="false" 参数,亦或配置是保存在由 configSource 参数链接到 Web.config 文件的单独文件中。

在同一个文件中配置多个 ASP.NET 资源

在管理多个配置或用同一个 ISP 配置来管理客户网站时,就可以在同一个 Web.config 文件中保存多种位置的配置。比如,使用 location 元素的 path 参数,开发者就可以为多个保存在应用程序子目录中的特定 ASP.NET 资源进行配置。

虚拟路径与物理路径之间的配置冲突

虚拟目录的配置依赖于物理目录的结构,而且对虚拟目录的组织应该谨慎,以避免出现配置问题。比如,假设开发者有一个位于下例物理目录结构中的 MyResource.aspx 文件。

C:\Subdir1\Subdir2\MyResource.aspx

另外,开发者可能还需要一个 Subdir1 目录下的配置文件,虚拟目录 Vdir1 被映射到 c:\Subdir1,而虚拟目录 Vdir2 则被映射到 c:\Subdir1\Subdir2。如果某个客户端使用 http://localhost/vdir1/subdir2/MyResource.aspx 对物理位置的 c:\Subdir1\Subdir2\MyResource.aspx 文件进行访问,该资源就会对虚拟目录 Vdir1 的配置进行继承。但是,如果客户端使用 http://localhost/vdir2/MyResource.aspx 访问相同的资源时,情况就不同了,实际是资源并不从 Vdir1 那里继承配置。使用相同方式创建虚拟目录时还会导致无法意料的结果,甚至可能引起应用程序产生错误。所以建议还是不要使用嵌套的虚拟路径,如果一定要用,那就请只使用一个 Web.config 文件。

限制 ASP.NET 的配置继承

开发者可能需要对配置的继承进行限制以提高应用程序性能、提高可靠性、以及简化管理。这个需求可以通过使用 allowOverridelockAttributeslockAllAttributesExceptlockAllElementsExceptlockItemlockElements 参数来实现。

转载于:https://www.cnblogs.com/Laeb/archive/2006/12/15/593632.html

ASP.NET 配置文件的层次和继承关系相关推荐

  1. 认识ASP.NET配置文件Web.config

      认识ASP.NET配置文件Web.config Web.config文件是一个XML文本文件,它用来储存 ASP.NET Web 应用程序的配置信息(如最常用的设置ASP.NET Web 应用程序 ...

  2. java继承 映射_hibernate继承关系映射和java反射机制的运用

    转:http://blog.csdn.net/derpvailzhangfan/article/details/1957946 ,感谢博主分享 Notes:hibernate元数据的运用:uuid的概 ...

  3. 代码重构(五):继承关系重构规则

    陆陆续续的发表了多篇关于重构的文章了,还是那句话,重构是一个项目迭代开发中必不可少的一个阶段.其实重构伴随着你的项目的整个阶段.在前几篇关于重构的文章中我们谈到了函数的重构.类的重构.数据的重构以及条 ...

  4. hibernate 表关系映射详解之继承关系

    举例:亚马逊的网上商城可以卖很多东西,比如说图书,电器,水果等等,那么我们以面向对象的理念去抽象一个商品类,他具有商品的共有属性,比如说上架时间,当前         价格,优惠价格等待,商品可以继承 ...

  5. 【JavaWeb】一文Servlet全解:继承关系、生命周期、容器和请求转发与重定向等

    文章目录 一.Servlet 概述 二.Servlet HelloWorld 三.Servlet 继承关系 四.Servlet 生命周期 五.ServletConfig 和 ServletContex ...

  6. Entity Framework -- 使用类别字段的实体继承关系

    我们经常使用数据表中的类别字段来分辨所存记录的类型,在对象场景下,我们一般会将其演化为有继承关系的一组对象,以符合面向对象的设计和使用,那么我们在Entity Framework环境中如何来实现这样的 ...

  7. Idea不能显示类的继承关系,pom文件的右键属性中也没有Diagrams选项(已解决)

    今天在使用idea的过程中,莫名发现,pom文件中点击右键,没有show Dependencies或者Diagrams选项,并且java类也不能显示集成关系,查阅了一下资料,很多人推荐重装软件,或者是 ...

  8. java集合类继承关系图_java集合继承关系图

    面向对象语言对事物的体现都是以对象的形式,所以为了方便对多个对象的操作,就对对象进行存储,集合就是存储对象最常用的一种方式. 数组虽然也可以存储对象,但长度是固定的:集合长度是可变的,数组中可以存储基 ...

  9. 深入Spring Boot:ClassLoader的继承关系和影响

    前言 对spring boot本身启动原理的分析,请参考:http://hengyunabc.github.io/spring-boot-application-start-analysis/ Spr ...

最新文章

  1. es任务 如何kill_kill进程的方法
  2. 如何判断网站设计是否优质?
  3. linux下踢出已登录用户
  4. Compiling Cpp(zz)
  5. linux中如何运行html文件路径问题,Linux中如何查询运行文件的全路径的方法
  6. python-项目-每日答题系统-01-外部框架搭建
  7. Python: 组合管理与蒙特卡洛方法实现
  8. svn客户端(Windows版本)
  9. 斯坦福stanford coreNLP 宾州树库汉语短语类别表23个
  10. Db2数据库:日期函数DATE函数
  11. 常见的H5C3的面试题
  12. 6种优秀的浏览器兼容性测试工具
  13. java parse json string
  14. Ubuntu20.04台式机网线连接Win10笔记本上网(亲测)
  15. 使用vite创建单页应用
  16. WPS 代码域 修改默认代码域 使目录页码样式和页脚样式不同。
  17. ibatis读写oracle的clob字段
  18. ROS使用教程--关于rosbag
  19. 刀具更换策略问题(完工)
  20. 基于BH1750FVI光照传感模块的入射…

热门文章

  1. 新站SEO优化如何吸引搜索引擎蜘蛛的爬行?
  2. 七天快排优化真的存在!
  3. php 图片地址用变量,php使用ob_start()实现图片存入变量的方法
  4. android uinput 按键_linux 虚拟输入设备(uinput)模拟鼠标和键盘的使用方法
  5. r语言中mpg数据_R语言数据筛选整理包dplyr
  6. 放个手机在单位自动打卡_钉钉自动打卡(家校打卡,寒假特辑)
  7. 为什么一些人喜欢在java代码中能加final的变量都加上final
  8. mac下编译安装grafana 4.2.0
  9. python qq邮箱 群发
  10. MySQL安装时MySQL server一直安装失败日志显示This application requires Visual Studio 2013 Redistributable...