如何在Web.Config中停止<configSections>的inheritance

你根本不能使用<location path="." inheritInChildApplications="false"> 在web.config的某些部分中,为了告诉它忽略某些部分的inheritance(你会得到像'inheritInChildApplications属性没有声明'的错误,所以如果你尝试把它放在部分不支持的地方)。

例如,你不能在<configSections>之前或之内使用它。 你可以把你的<system.web>标签包装在位置标签中,但是我需要停止<configSections>的任何东西的inheritance,而且我也没有办法做到这一点。

我的子应用程序inheritance了一些与我的父应用程序的Webconfiguration在树中的IIS 7中具有相同的configuration设置。 我看不到在configSecion标记中放置一个<clear/> ,因为它是一个无效的标记,如果你尝试添加它。

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

这个同样的问题在SO和其他许多论坛上被多次询问,答案也差不多,不,你不能使用位置/清除/删除configuration。

微软甚至在他们的线程上回答如下。

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

  <clear /> and <remove /> 

从来没有为configSections和sectionGroups实现,因为试图合并相同的section-handlers和section组的不同定义是很困难的。

我们考虑为VS 2010版本添加这种types的function,但我们决定反对它,原因有两个。

第一个是它带来的额外复杂性,很大程度上是因为分区处理程序和分区组用于引导configuration系统。 因此在引导configuration系统的过程中允许合并语义是一个不容忽视的问题。

第二个原因是通常节处理程序和节组定义是在两个不同的地方进行的 – 在根configuration文件中注册的初始集合,然后在应用程序级别web.config中添加一组注册。 这并不意味着开发人员想要修改处理程序定义的scheme是无效的 – 这只是一个低可能性的情况。 感谢您花时间通过Connect提交您的build议!


看看这个SO线程,哪些简单的状态避免使用冲突的部分组。

不过,奈尔曼build议跟随,

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

如何防止“configSections”的web.config文件的inheritance?

信贷这个到这个stackoverflow答案: “条目已经被添加” – 两个独立的应用程序池

包括在这里,所以我不会抱怨…

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

 enableConfigurationOverride="false" 

对于不应从父级inheritanceweb.config设置的每个应用程序池。 对我来说,这performance如下:

定义了一个重复的“system.web.extensions / scripting / scriptResourceHandler”部分

如果您希望在.NET2父级应用程序下运行.NET4应用程序(甚至作为独立的应用程序和池),那么这似乎是唯一可行的解​​决scheme。

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

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

你可以做的是将该文件夹作为一个应用程序,做一个反向代理(使用IIS 7的URL重写模块)到另一个内部网站,它应该保持configuration完全分离。

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

一个可怕的想法是说实话(我讨厌肮脏的方法来完成事情),你应该能够告诉IIS你想要一个干净的石板子应用程序的configuration。