如何在Web.Config中停止继承<configSections>

Pos*_*Guy 40 asp.net web-config

你根本无法<location path="." inheritInChildApplications="false">在你的web.config的某些部分使用它,以告诉它忽略某些部分的继承(你会得到错误,例如'inheritInChildApplications属性未被声明',所以如果你尝试把它放在它的部分,那么第四不支持).

例如,您不能在之前或之内使用它<configSections>.例如,您可以将<system.web>标记包装在位置标记中,但我需要停止继承任何内容,<configSections>并且我没有看到这样做的方法.

我的子应用程序继承了我父应用程序的Web配置在树中的IIS 7中具有的一些相同的配置设置.我认为无法<clear/>在configSecion标记中放置任何一个,因为如果您尝试将其添加到无效标记中,则它是无效标记.

你怎么告诉它忽略那一节?

Adn*_*tti 21

在SO以及许多其他论坛上多次询问同样的问题,答案或多或少相同,不,你不能使用location/clear/remove for configsection.

微软甚至在他们的主题上回复如下.

微软于2009年7月23日下午5:40发布

 <clear /> and <remove />
Run Code Online (Sandbox Code Playgroud)

从未为configSections和sectionGroups实现,因为尝试合并相同节处理程序和节组的不同定义有困难.

我们考虑为VS 2010版本添加此类功能,但出于两个原因我们决定反对它.

第一个是它带来的额外复杂性,很大程度上是因为部分处理程序和部分组用于引导配置系统.因此,在引导过程中允许合并语义,配置系统是一个需要解决的重要问题.

第二个原因是通常节处理程序和节组定义在两个不同的位置进行 - 根配置文件中的初始注册集,然后是应用程序级web.config中的一组附加注册.这并不意味着开发人员想要修改处理程序定义的场景无效 - 它只是一种低可能性场景.感谢您抽出时间通过Connect提交您的建议!


查看此SO线程,哪些简单状态避免使用冲突的节组.

但是,奈尔曼建议跟随,

我不确定您是否可以在子文件夹中以不同的方式定义相同的部分; 您可以将该子文件夹设置为独立的虚拟应用程序,在这种情况下,它不会从父级继承任何设置; 在这种情况下,它也会在自己的应用程序池中执行; 如果你没有InProc依赖项,那也是一个选项

如何防止"configSections"的web.config文件继承?


Str*_*ill 2

您可以做的是使该文件夹成为一个应用程序,对其进行反向代理(使用 IIS 7 的 URL 重写模块)到另一个内部站点,并且它应该保持配置完全独立。

例如,我们的代理重定向之一是:使用通配符 * 匹配模式来重写 URL http://127.0.0.1:8080/ {R:1}

老实说,这是一个糟糕的主意(我讨厌用肮脏的方法来完成工作),您应该能够告诉 IIS 您想要子应用程序的配置有一个干净的状态。