我的问题可能听起来很奇怪,但我找不到任何信息。怎么会发生.net应用程序有两种不同类型的配置文件:app.config和web.config。
我的一个假设是,他们来自不同的开发团队。但为什么不把它们合并呢?
如果有人知道原因,那么如果你能分享它就会很棒
P.S。我理解,这个问题可能被解释为offtopic,并且如果在评论中看到这样的注释,则会将其删除
答案 0 :(得分:2)
如果您在项目中执行控制台应用程序,Windows窗体或Windows服务等Windows应用程序,则将配置设置存储在app.config
中。但是当您构建该项目时,app.config内容存储在名为yourExeName.exe.config
当您使用asp.net应用程序时,您使用web.config。这可能因发布配置(或配置转换)而异。因此,您有web.debug.config
或web.release.config
。但是当您最终部署/发布应用程序时,您通常会找到web.config
。
如果您正在使用简单的类库项目,仍然可以使用app.config
。你也可能有一些设置。因此,当dll(即类库项目的输出)在不同的应用程序中使用时,您必须确保这些应用程序设置需要存在于目标应用程序中,因为app.config的东西不会复制自己进入目标组件的配置。
现在他们为什么不同?因为我认为桌面应用和网络应用在工作方式上存在固有的差异。
建议阅读this以获得更好的图片。免责声明......来自我的博客。
答案 1 :(得分:1)
引自http://forums.asp.net(link):
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)了解详细信息。