web.config 覆盖 app.config ...为啥?

Posted

技术标签:

【中文标题】web.config 覆盖 app.config ...为啥?【英文标题】:web.config overrides app.config...why?web.config 覆盖 app.config ...为什么? 【发布时间】:2011-02-27 05:33:01 【问题描述】:

我有两个 DLL:一个带有 web.config,另一个带有 app.config

我将连接字符串从 web.config 移至 app.config,以便其他 DLL 可以使用它。

现在,当我调用 ConfigurationManager.GetSection("SomeSection") 时,应用程序会查找 web.config,而它应该查找 app.config。为什么这样做是没有意义的,因为 web.config 在单独的 DLL 中。

谁能解释一下?

【问题讨论】:

您似乎已决定在 web.config 文件之外的其他地方进行一些配置,而这不是常态。如果您可以添加到您的问题为什么您希望/需要将此配置存储在其他地方,也许可以添加一些其他答案来帮助您。 我没有意识到 web.config 对于整个应用程序是全局的。我认为它只能在该 DLL 中访问,因此我想将所有连接字符串和自定义设置存储在可以从其他 DLL 调用的中间层中。 【参考方案1】:

永远不会使用 DLL 的 app.config。

用于 EXE 的 app.config 重命名为 .exe.config,并由 EXE 使用

web.config 被网站/应用程序使用。

本质上,如果 Visual Studio 有助于为您将 app.config 文件添加到 DLL 项目中,那么它所提供的只是复制并粘贴到适当的最终配置文件中——EXE 的 app.config 或网站/应用程序的 web.config。

@vikps 评论:暂时忽略网站子目录和 configSource 的问题,您不能在应用程序的配置中涉及多个配置文件。在这种情况下,子目录或 configSource 都不会帮助您。

使用configSource,应用程序可以指定应从备用配置文件中读取整个配置部分。但是只有当整个配置部分都存在于这个其他文件中时,您才能执行此操作(例如,您不能在 web.config 中有一个 connectionStrings 部分,也不能从其他来源加载更多连接字符串)

【讨论】:

感谢您的回复。我需要一个类库的配置文件。它将存储连接字符串和其他设置。如何创建配置文件的 exe? 您能否确认每个 DLL 中不可能有 1 个配置文件?我有超过 5 个 DLL,我希望我可以为每个 DLL 提供一个配置文件。我可以使用指向不同 DLL 的confiSource 吗?否则所有配置文件都必须驻留在启动项目中?这是我实例中的一个网络项目。 这些 DLL 将要读取的所有配置都必须在 web.config 中 - 您必须自己将所有这些配置信息合并在一起。就像我说的那样,configSource 不太可能解决您的问题,因为它基本上是一种表示“从这个文件中读取 所有 的连接字符串”的方式。 我还有其他选择吗? Web 配置是 Web 项目的必需品,因此它不能移动到任何地方,所以我唯一能做的就是将其分解为几个文件。我可以在我的 DLL 中包含自定义配置文件(可能是 XML)...

以上是关于web.config 覆盖 app.config ...为啥?的主要内容,如果未能解决你的问题,请参考以下文章

App.Config 与 Web.Config

app.config/web.config 中的变量

WCF 何时使用 app.config 或 web.config?

web.config 和 app.config 混淆

App.Config 和 Web.Config 的区别?

WCF开发中的Web.config和App.config