ASP.NET配置文件层次结构和继承2011-02-05您可以在整个应用程序目录中分发 ASP.NET 配置文件,以便以继承层次结构配置 ASP.NET 应用程序。使用此结构,可以在适当的目录级别实现应用程序所需级别的配置详细信息,而不影响较高目录级别中的配置设置。配置结构ASP.NET 配置文件称为 Web.config 文件,它们可以出现在 ASP.NET 应用程序的多个目录中。ASP.NET 配置层次结构具有下列特征:使用应用于配置文件所在的目录及其所有子目录中的资源的配置文件。允许您将配置数据放在将使它具有适当范围(整台计算机、所有的 Web 应用程序、单个应用程序或该应用程序中的子目录)的位置。允许重写从配置层次结构中的较高级别继承的配置设置。还允许锁定配置设置,以防止它们被较低级别的配置设置所重写。将配置设置的逻辑组组织成节的形式。配置继承所有的 .NET Framework 应用程序都从一个名为Microsoft .NETFramework版本号CONFIGMachine.config的文件继承基本配置设置和默认值。Machine.config 文件用于服务器级的配置设置。其中的某些设置不能在位于层次结构中较低级别的配置文件中被重写。.NET 客户端应用程序(控制台和 Windows 应用程序)使用名为 ApplicationName.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 将搜索 statusCode 属性等于“404”的 customErrors 的 error 元素(ASP.NET 设置架构)元素。一旦 ASP.NET 在配置设置中找到 404 错误,将 redirect 属性中的 URL 作为响应返回。配置设置的范围配置设置具有不同的范围 - 有些具有全局范围,有些仅对应用程序范围(根 Web.config 文件或 Machine.config 文件)有效。配置节的范围是在 Machine.config 文件中的 configSections 的 section 元素(常规设置架构)元素的 allowDefinition 属性中为包含在 ASP.NET 中的所有节定义的。例如,authentication 元素(ASP.NET 设置架构)元素具有 MachineToApplication 元素的 allowDefinition 属性。这意味着,authentication 元素可以在应用程序级别的 Machine.config 文件、根 Web.config 文件和 Web.config 文件中设置。如果它是在子目录级别设置的,则会引发错误。如果没有为某个节定义 allowDefinition 属性,则默认值为 Everywhere。“元素信息”表中“可配置的位置”旁边列出了 ASP.NET 配置设置 和 常规配置设置 (ASP.NET) 中每个元素的配置设置范围。下表列出了每个文件在配置层次结构中的级别、每个文件的名称以及对每个文件的重要继承特征的说明。
| 配置级别 | 文件名 | 文件说明 |
| 服务器 | Machine.config | Machine.config文件包含服务器上所有 Web 应用程序的 ASP.NET 架构。此文件位于配置合并层次结构的顶层。 |
| 根Web | Web.config | 服务器的 Web.config 文件与 Machine.config 文件存储在同一个目录中,它包含大部分 system.web 配置节的默认值。运行时,此文件是从配置层次结构中的从上往下数第二层合并的。 |
| 网站 | Web.config | 特定网站的 Web.config 文件包含应用于该网站的设置,并向下继承到该站点的所有 ASP.NET 应用程序和子目录。 |
| ASP.NET应用程序根目录 | Web.config | 特定 ASP.NET 应用程序的 Web.config 文件位于该应用程序的根目录中,它包含应用于 Web 应用程序并向下继承到其分支中的所有子目录的设置。 |
| ASP.NET 应用程序子目录 | Web.config | 应用程序子目录的 Web.config 文件包含应用于此子目录并向下继承到其分支中的所有子目录的设置。 |
| 客户端应用程序目录 | ApplicationName.configApplicationName.config | 文件包含 Windows 客户端应用程序(而非 Web 应用程序)的设置。 |