Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Disable web.config inheritance?

Tags:

asp.net

I have a content management application in the root of my website, and I'm trying to use a different app (a billing application) under a sub-folder. Unfortunately, the web.config of the root site is interfering with the sub-app.

Is there a way to just disable web.config inheritance for a sub-folder?

Update: As linked by Stephen Burris, using the <location> tag can prevent inheritance for part of the web config, as follows:

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

The <configSections> and <runtime> sections will not accept being enclosed in the tag...so I guess this only does most of the job. Anybody know how to do it better?

like image 360
JoshRivers Avatar asked Dec 15 '08 01:12

JoshRivers


People also ask

How do I stop web config inheritance?

I didn't want to change the /blog applications' web. config. I just wanted to stop it from inheriting the settings from the parent application. Turns out you can wrap whole sections in a location tag, and then tell that scoped tag to prevent child applications from inheriting.

What is location path in web config?

The path attribute defines the site or virtual directory that the configuration settings cover. To specify that the settings in the <location> element apply to the default Web site, set the path attribute to Default Web Site .


4 Answers

There is an attribute that you can use in the root web.config file to cause it not to have its contents become inherited by child applications.

inheritInChildApplications

Blog about inheritInChildApplications

MSDN article on ASP.NET Configuration File Hierarcy and Inheritance

Put the part of the config that is not for inheritance inside

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

Config sections seem to be impossible to not inherit, but other parts of configuration can be "commented" out like this and don't get inherited.

like image 98
SBurris Avatar answered Oct 06 '22 03:10

SBurris


If you can use 2 separate application pools, you can completely stop inheritance by using an attibute enableConfigurationOverride="false" in the applicationHost.config file as I described in this question: “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>
like image 26
Matteo Sganzetta Avatar answered Oct 06 '22 02:10

Matteo Sganzetta


In my opinion every time I've struggled with this the answer ends up being effectively NO - and I'm leaving this here for my future self to find so he doesn't waste any more time on it.

I've found this to be a huge problem when you just want to add something as a virtual directory inside an existing site. With a complex web.config files I've always just ended up giving up and moving it to a different application altogether.

like image 28
Simon_Weaver Avatar answered Oct 06 '22 02:10

Simon_Weaver


I would explicitly define all of the settings required - never assume that any setting is still set to the default value.

For example, if you're defining a connectionString include a <clear /> tag before the <add name=... />, etc. For Membership define all of the attributes, including the cookie name. And so on.

It may make the file a bit bigger but it will definitely help you avoid the "but it worked on my box" scenario too :-)

like image 35
devstuff Avatar answered Oct 06 '22 02:10

devstuff