【问题标题】:Disable web.config inheritance?禁用 web.config 继承?
【发布时间】:2010-09-26 21:45:46
【问题描述】:

我的网站根目录中有一个内容管理应用程序,我正在尝试在子文件夹下使用其他应用程序(计费应用程序)。不幸的是,根站点的 web.config 正在干扰子应用程序。

有没有办法只禁用子文件夹的 web.config 继承?

更新: 正如Stephen Burris所链接,使用<location>标签可以防止部分web配置的继承,如下:

<?xml version="1.0"?>
<configuration>
<configSections>
    ....
</configSections>
<location path="." inheritInChildApplications="false">
    <appSettings>
        ....
    </appSettings>
    <connectionStrings/>
    <system.web>
        ....
    </system.web>
    <system.codedom>
        ....
    </system.codedom>
    <system.webServer>
        ....
    </system.webServer>
</location>
<runtime>
    ....
</runtime>
</configuration>

&lt;configSections&gt;&lt;runtime&gt; 部分不接受包含在标签中...所以我想这只能完成大部分工作。有谁知道如何做得更好?

【问题讨论】:

  • tldr,不要打扰;未来 11 年多以后。 我正在将应用程序转移到不同的站点,以避免这种废话。由于许多原因,没有一种干净的方法来处理复杂的继承:1)根本不能禁用某些部分的继承; 2) 不能选择性地禁用其他部分的部分继承; 3)抑制继承(它在哪里起作用)不一致地阻止从祖父母继承(例如主机配置)。

标签: asp.net


【解决方案1】:

您可以在根 web.config 文件中使用一个属性,使其内容不会被子应用程序继承。

inheritInChildApplications

Blog about inheritInChildApplications

MSDN article on ASP.NET Configuration File Hierarcy and Inheritance

将配置中不用于继承的部分放在里面

<location inheritInChildApplications="false">
     <NotInheritedConfigPart/>
</location>

配置部分似乎不可能不继承,但配置的其他部分可以像这样“注释”掉并且不会被继承。

【讨论】:

  • 这种方法存在问题。您可以禁用 中项目的继承,但这对 部分没有任何作用。有人知道如何禁用 中的项目继承吗?
  • 我无法使用“inheritInChildApplications”,因为 VS 不喜欢它。相反,我所做的是通过使用 标记来否定 IIS 抱怨的事情。这对我有用。
【解决方案2】:

如果您可以使用 2 个单独的应用程序池,则可以通过在 applicationHost.config 文件中使用属性 enableConfigurationOverride="false" 来完全停止继承,正如我在此问题中所述:“Entry has already been added” - Two Separate App Pools

<add name="MyAppPool" enableConfigurationOverride="false" autoStart="true" managedRuntimeVersion="v4.0" managedPipelineMode="Integrated" >
    <processModel identityType="NetworkService" />
</add>

【讨论】:

  • 没有用户界面设置?列于docs.microsoft.com/en-us/iis/configuration/…
  • 无法在 IIS 10 中使用此方法,即使将顶级文件夹转换为具有不同应用程序池的 新应用程序。添加了仍从主应用继承的子应用的设置。
【解决方案3】:

在我看来,每次我为此苦苦挣扎时,答案实际上都是“否”——我把这个留在这里,让我未来的自己去寻找,这样他就不会再浪费时间了。

当您只想在现有站点中添加一些内容作为虚拟目录时,我发现这是一个大问题。对于复杂的 web.config 文件,我总是最终放弃并将其完全转移到不同的应用程序中。

【讨论】:

  • 他们是在 'asp.next' 中解决这个问题吗?
  • 我不敢相信没有办法全局覆盖它!什么狗屁!
【解决方案4】:

我会明确定义所需的所有设置 - 永远不要假设任何设置仍设置为默认值。

例如,如果您要定义一个连接字符串,则在 &lt;add name=... /&gt; 之前包含一个 &lt;clear /&gt; 标记等。对于 Membership 定义所有属性,包括 cookie 名称。以此类推。

它可能会使文件更大一些,但它肯定会帮助您避免“但它也适用于我的盒子”的情况:-)

【讨论】:

  • 不完全是我期望的好答案,但也许这是最不坏的选择......
猜你喜欢
  • 2011-10-29
  • 2010-12-10
  • 2011-11-11
  • 2012-08-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-09-14
  • 1970-01-01
相关资源
最近更新 更多