web.config和machine.config有什么区别?

14

web.configmachine.config有什么区别?

我了解到:

web.config文件用于指定特定网站应用程序的配置设置,而且位于该应用程序的根目录下;machine.config文件用户指定整个服务器上的所有网站的配置设置,该文件位于$WINDOWSDIR$\Microsoft.Net\Framework\Version\Config下。

是否有其他我未了解的方面或其他技术细节?我想了解更多关于这两个文件的信息。

5个回答

21
每个CLR版本都有一个名为machine.config的文件,以及另一个名为“机器级web.config文件”的web.config文件。
此外,正如您所指出的,每个Web应用程序也有一个web.config文件。Web应用程序中的目录也可以拥有web.config文件。
现在,关键点在于配置文件会相互继承。这意味着Web应用程序将读取machine.config文件和该框架版本的机器级web.config文件(对于给定的框架版本),以及它自己的web.config文件中定义的设置。
machine.config中定义内容的常见用例是在服务器上许多应用程序之间共享值,例如连接字符串或SMTP服务器设置等。

3
回答很好,但我有一个小修正:应该是每个CLR版本,而不是“每个.NET框架”(例如,.NET Framework 3.0没有自己的CLR,因此没有为该.NET框架提供新的machine.config)。 - Tamir
除了自 .NET Core 1.0(以及 .NET 5 及更高版本)开始,就不再有 machine.config 文件了,而是采用 runtimeconfig.json 作为替代方案(有时会错误地称为 runtime.config https://learn.microsoft.com/en-us/dotnet/core/run-time-config/)。 - Dai

4
让我来解释一下:在ASP.NET中,存在一个配置文件层次结构,machine.config文件位于根目录中。这意味着machine.config文件包含应用于您创建的每个Web应用程序的配置设置。它位于Windows/Microsoft .NET/Framework/[version]/config路径下。在相同的物理路径下,您会发现一个名为A的web.config文件。此web.config文件继承自machine.config的配置设置。现在,您有一个包含web.config文件(位于根级别)的应用程序文件夹。这个web.config(我称之为B)继承自A的配置设置。如果您在应用程序文件夹的子目录中有web.config,则子目录web.config从B中继承配置设置。这就是层级关系的运作方式。

4
这些是一些最重要的细节; 虽然实际上,machine.config 不仅仅是 ASP.NET 自身的配置。还有另一个文件值得关注,它(我认为)位于与 machine.config 相同的位置; 那就是“根”web.config,它位于 machine.config 和特定于站点的 web.config 文件之间,并且当然是 ASP.NET 特定的。
在 IIS 管理控制台中在服务器级别更改的某些设置是在根 web.config 中执行的。
请注意,此层次结构针对每个 .NET 版本; (2.0 有一个; 4.0 有自己的)
另请注意:您可以在目录和/或站点根目录下的子应用程序中拥有子 web.config 文件,这些文件进一步修改了“基础”。
最后,一个警告:并非所有设置都可以在子级 web.config 文件中覆盖。在此处描述的层次结构的任何级别上锁定某些设置是可能的(默认情况下某些设置被锁定)。

2

machine.config 是系统上的终极主配置文件,具备许多默认设置。当您使用 web.config 文件时(按级联顺序),实际上是用新设置覆盖这些默认设置。


1

Machine.Config

  • 安装Visual Studio .Net时,此文件将自动安装。
  • 这也被称为机器级配置文件。
  • 服务器上只存在一个machine.config文件。
  • 此文件位于配置层次结构的最高级别。

Web.Config

  • 当您创建ASP.Net Web应用程序项目时,将自动创建此文件。
  • 这也被称为应用程序级配置文件。
  • 此文件继承自machine.config的设置。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接