我的网站根目录中有一个内容管理应用程序,我正在尝试在子文件夹下使用不同的应用程序(计费应用程序)。不幸的是,根网站的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>
部分不接受被封装在标签中...所以我想这只能完成大部分工作。谁知道怎么做得更好?
答案 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名称。等等。
它可能会使文件更大一些,但它肯定会帮助你避免“但它在我的盒子上工作”场景: - )