为什么web.config会覆盖app.config?

3
我有两个DLL文件:一个带有web.config,另一个带有app.config。
我将连接字符串从web.config移动到app.config中,以便其他DLL可以使用它。
现在,当我调用ConfigurationManager.GetSection("SomeSection")时,应用程序会寻找web.config,而不是应该寻找app.config。这不合理,因为web.config在一个单独的DLL中。
请问是否有人可以解释一下这是为什么?

你似乎决定将一些配置放在 web.config 文件以外的地方,而这不是通常的做法。如果你能在问题中补充说明你为什么想要/需要将此配置存储到其他位置,也许可以添加其他答案来帮助你。 - Damien_The_Unbeliever
我没有意识到 web.config 是整个应用程序的全局配置文件。我以为它只能在那个 DLL 中访问,因此我想将所有连接字符串和自定义设置存储在一个中间层中,可以从其他 DLL 中调用。 - user338195
1个回答

7

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

EXE的app.config已更名为.exe.config,并由EXE使用。

web.config用于网站/应用程序。

基本上,如果Visual Studio为DLL项目添加了一个app.config文件,它只是提供了一个要复制和粘贴到适当最终配置文件(即EXE的app.config或Web站点/应用程序的web.config)中的东西。

@vikps的评论:暂且忽略网站子目录和configSource的问题,您不能让多个配置文件参与应用程序的配置。在这种情况下,子目录和configSource都无法帮助您。

使用configSource,应用程序可以指定应从替代配置文件中读取整个配置部分。但是,只有在此其他文件中存在整个配置部分时才能这样做(例如,您不能在web.config中具有connectionStrings部分,并且还从其他来源加载一些连接字符串)。


谢谢回复。我需要一个类库的配置文件,它将存储连接字符串和其他设置。我如何创建配置文件的exe文件? - user338195
请问您能否确认每个DLL中都不可能有一个配置文件?我有超过5个DLL,希望为每个DLL都有一个配置文件。我可以使用指向不同DLL的confiSource吗?否则所有配置文件必须驻留在启动项目中?在我的情况下是Web项目。 - user338195
所有这些DLL将要读取的配置都必须在web.config文件中 - 您必须自己合并所有这些配置信息。就像我说的那样,configSource不太可能解决您的问题,因为它基本上是一种说法,即“从另一个文件中读取所有连接字符串”。 - Damien_The_Unbeliever
我有其他选择吗?Web配置文件对于Web项目来说是必须的,因此它不能被移动到其他地方,所以我唯一能做的就是将其拆分成几个文件。我可以在我的DLL中使用自定义配置文件(可能是XML格式)... - user338195

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