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

时间:2009-10-15 13:20:05

标签: asp.net web-config

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

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

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

你怎么告诉它忽略那个部分?

3 个答案:

答案 0 :(得分:20)

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

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

  

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

 <clear /> and <remove />
  

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

     

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

     

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

     

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


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

但是,奈尔曼建议关注,

  

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

How to prevent inheritance for web.config file for "configSections"?

答案 1 :(得分:1)

归功于此stackoverflow答案:"Entry has already been added" - Two Separate App Pools

包含在这里所以我不会抱怨...

编辑C:\ Windows \ System32 \ inetsrv \ config \ applicationHost.config以添加

enableConfigurationOverride="false"

对于不应从父级继承web.config设置的每个应用程序池。这表现在我身上如下:

  

有一个重复的&#39; system.web.extensions / scripting / scriptResourceHandler&#39;部分定义

如果您希望在.NET2父应用程序下运行.NET4应用程序(即使是单独的应用程序和池),那么这似乎是唯一可行的解​​决方案。

作为applicationHost.config中包含此属性的示例应用程序池条目:

<add name="MyApplicationPool" autoStart="true" managedRuntimeVersion="v4.0" enableConfigurationOverride="false">
<processModel identityType="ApplicationPoolIdentity" />
</add>

答案 2 :(得分:0)

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

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

说实话的一个可怕的想法(我讨厌完成任务的脏方法),你应该能够告诉IIS你想在子应用程序的配置上有一个干净的平板。