前言:之所以写这个系列的文章的缘由来自于Jeffery Zhao.之前看老赵的“MVC"讲座的时候,记得老赵曾经说过:一个真正的ASP.NET程序员应该对配置文件web.config要很熟练,而且对于配置文件的节点的相关知识都要很了解,现有的很多的ASP.NET书籍都只是讲控件怎么使用等等,而且现有的一些参考文档都是只是讲讲配置节点怎么使用,很少详细的讲述配置文件的(注:老赵的原话不是这样的:)。所以这里我大胆的写了本系列的文章,有欠妥当的地方还望大家见谅!
首先我们就来看看配置文件的继承层次。都知道在ASP.NET中有很多的配置文件,如machine.config,web.config,特别是web.config出现在很多的地方,出现在不同的地方作用也不一样。而且我们还知道machine.config中的配置对服务器上所有ASP.NET网站起作用,而web.config中的配置就依据它所在的位置而定,如在一个网站根目录中的web.config就对整个网站起作用,在一个网站中的某个文件夹中的web.config就只对该文件夹起作用,而且网站跟目录中的web.config中的配置也对这个文件夹起作用。这就反映出了另外一个事实:配置文件是有继承层次的. 换个角度,对于一个网站中的某个文件夹,它不仅仅只是受本文件夹中web.config的配置约束,而且还收到本网站中根目录下的web.config的约束,而且还受到本台服务器上的machine.config的约束。
下面我们就来具体的看看ASP.NET中的配置文件的继承层次:
1.machine.confiig-在ASP.NET中,很多的默认的配置都是定义在这个配置文件中的,但是有一些配置已经从machine.config中移出到别的地方了,为了缩短ASP.NET的加载时间。我们知道在运行一个ASP.NET程序的时候,ASP.NET运行时是要加载很多的配置文件的,当然machine.config是一定要加载的,但是其中有些配置不是必须的,所以就移到别的地方,如果用到就加载。
2.在安装根目录中的web.config-在%windir%\Microsoft.NET\Framework\v2.0.50727\CONFIG中的配置文件,之前说过machine.config把很多的配置移出了,就放在这个配置中。
3.在根目录中的web.config-我们也可以把web.config放在根目录中,让它对整个根目录起作用。如:c:\inetpub\wwwroot.因为我们可以新建很多的虚拟目录文件夹,文件夹中有网站程序,如果把配置文件放在虚拟目录中,那么配置就对整个文件夹中的网站起作用。
4.一个网站中的web.config-这是我们最常见的配置地方。
5网站中的某个文件夹中的web.config-我们常常通过这个配置文件来限制对文件的访问权限。
上次就是配置文件的层次关于,下一级的配置文件的作用是在它上面所有配置约束的总和。就是说:一个网站中的文件夹的配置约束是machine.config+web.config+...+web,config(这个说法不是很恰当,希望大家明白意思就好)。