为什么app.config和web.config都存在?

时间:2014-05-08 05:26:05

标签: asp.net .net

我的问题可能听起来很奇怪,但我找不到任何信息。怎么会发生.net应用程序有两种不同类型的配置文件:app.config和web.config。

我的一个假设是,他们来自不同的开发团队。但为什么不把它们合并呢?

如果有人知道原因,那么如果你能分享它就会很棒

P.S。我理解,这个问题可能被解释为offtopic,并且如果在评论中看到这样的注释,则会将其删除

3 个答案:

答案 0 :(得分:2)

如果您在项目中执行控制台应用程序,Windows窗体或Windows服务等Windows应用程序,则将配置设置存储在app.config中。但是当您构建该项目时,app.config内容存储在名为yourExeName.exe.config

的文件中

当您使用asp.net应用程序时,您使用web.config。这可能因发布配置(或配置转换)而异。因此,您有web.debug.configweb.release.config。但是当您最终部署/发布应用程序时,您通常会找到web.config

如果您正在使用简单的类库项目,仍然可以使用app.config。你也可能有一些设置。因此,当dll(即类库项目的输出)在不同的应用程序中使用时,您必须确保这些应用程序设置需要存在于目标应用程序中,因为app.config的东西不会复制自己进入目标组件的配置。

现在他们为什么不同?因为我认为桌面应用和网络应用在工作方式上存在固有的差异。

建议阅读this以获得更好的图片。免责声明......来自我的博客。

答案 1 :(得分:1)

引自http://forums.asp.netlink):

  

machine.config是顶级的。它适用于在该服务器上运行的所有站点。出于安全原因,有一些设置只能在此.config文件中进行配置(想象一下,如果您的服务器上托管了多个不同的客户端)。其他设置可以由web.config覆盖,例如在单个网站中。不要删除此文件。

     

在asp.net网站的根文件夹中,您将找到web.config。这有关于配置站点的各种元素的重要信息,例如成员资格提供程序,任何第三方库以及您可能需要的额外程序集。不要删除此文件。

     

您可能还会在网站的子文件夹中找到web.config的其他副本。您可以拥有特定于这些文件夹的设置,例如设置安全权限。您通常会发现这些额外的web.config文件比主web.config轻得多。您可以删除这些文件,但这取决于您拥有的文件,但这样做可能会破坏功能,例如删除登录查看某个文件夹的要求。

     

App.config与web.config的概念类似,不同之处在于它用于非网站项目,例如桌面应用程序或类库。您可以再次删除此文件,但它可能会对其余代码产生奇怪的影响。

     

运行程序时,所有这些.config文件都在内存中堆叠在一起。首先读取machine.config,然后如果您的网站使用类库,则会读入app.configs并覆盖当前内存中的任何冲突设置。然后解析主web.config并使用此文件包含的任何冲突设置。最后,如果当前请求位于包含已解析的web.config的子文件夹中,并且还会删除任何冲突的设置。

     

这些冲突设置的一个常见示例是,如果您的类库中有数据库连接字符串,但需要在您的网站中覆盖它。

     

还有一个名为settings.settings的附加文件可能会出现,但据我记得它与桌面开发有关,并且不是.config系统的一部分。

答案 2 :(得分:0)

直接基本命中。

machine.config - 适用于在服务器上运行的所有网站。

App.config - 桌面应用程序(Windows窗体,WPF等)

Web.config - Web应用程序

请参阅(http://forums.asp.net/t/1671270.aspx?app+config+machine+config+web+config)了解详细信息。