【问题标题】:How to stop inheritance of <configSections>in Web.Config如何在 Web.Config 中停止 <configSections> 的继承
【发布时间】:2010-12-07 00:54:30
【问题描述】:

您根本不能在 web.config 的某些部分使用 &lt;location path="." inheritInChildApplications="false"&gt; 来告诉它忽略某些部分的继承(如果您尝试,您将收到诸如“未声明 inheritInChildApplications 属性”等错误把它放在不支持的部分)。

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

我的子应用程序继承了树中 IIS 7 中父应用程序的 Web 配置所具有的一些相同配置设置。我看不到在 configSeion 标签中添加&lt;clear/&gt; 的方法,因为如果您尝试在其中添加它,它是一个无效标签。

如何告诉它忽略该部分?

【问题讨论】:

  • 我不认为这是可以做到的。位置是我害怕的唯一方法
  • 好的,那么你如何解决与 的冲突??
  • 一定有人遇到过这个问题,但我什么也没看到。
  • 只需重命名父配置部分,例如parent-configsectioname 并在子项中将其称为 configsectionname 等...

标签: asp.net web-config


【解决方案1】:

在 SO 以及许多其他论坛上多次询问了同样的问题,答案或多或少相同,不,您不能使用 location/clear/remove 进行配置部分。

微软甚至在他们的帖子上回复如下。

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"?

【讨论】:

  • 已从文档中删除。他们处于一个从未进入 RTM 的预发布版本中
【解决方案2】:

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

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

老实说,这是一个糟糕的主意(我讨厌完成工作的肮脏方法),您应该能够告诉 IIS 您希望对子应用程序的配置进行清理。

【讨论】:

    【解决方案3】:

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

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

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

    enableConfigurationOverride="false"
    

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

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

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

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

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

    【讨论】:

    • 我自己使用这个解决方案在 SharePoint 2010 站点下运行 .NET 4 MVC 应用程序,所以我知道它确实有效。
    猜你喜欢
    • 2011-05-01
    • 1970-01-01
    • 2012-08-30
    • 1970-01-01
    • 2012-10-01
    • 2010-10-27
    • 2011-09-11
    • 2011-09-05
    • 2012-08-01
    相关资源
    最近更新 更多