禁用web.config继承?

时间:2008-12-15 01:46:12

标签: asp.net

我的网站根目录中有一个内容管理应用程序,我正在尝试在子文件夹下使用不同的应用程序(计费应用程序)。不幸的是,根网站的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>

<configSections><runtime>部分不接受被封装在标签中...所以我想这只能完成大部分工作。谁知道怎么做得更好?

4 个答案:

答案 0 :(得分:20)

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

inheritInChildApplications

Blog about inheritInChildApplications

MSDN article on ASP.NET Configuration File Hierarcy and Inheritance

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

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

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

答案 1 :(得分:15)

如果您可以使用2个单独的应用程序池,则可以使用applicationHost.config文件中的attibute 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>

答案 2 :(得分:8)

在我看来,每次我都在努力解决这个问题,答案最终都是有效的 - 我将离开这里,以便我未来的自我找到,所以他不会再浪费时间了。

当您只想在现有网站中添加虚拟目录时,我发现这是一个很大的问题。使用复杂的web.config文件,我总是最终放弃并将其移动到另一个应用程序。

答案 3 :(得分:4)

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

例如,如果您要定义一个connectionString,则在<clear />之前包含<add name=... />标记等。对于Membership,定义所有属性,包括cookie名称。等等。

它可能会使文件更大一些,但它肯定会帮助你避免“但它在我的盒子上工作”场景: - )