Отключить наследование web.config? - PullRequest
34 голосов
/ 15 декабря 2008

У меня есть приложение для управления контентом в корне моего сайта, и я пытаюсь использовать другое приложение (приложение для выставления счетов) в подпапке. К сожалению, web.config корневого сайта мешает вложенному приложению.

Есть ли способ просто отключить наследование web.config для подпапки?

Обновление: Связанный Stephen Burris , использование тега <location> может предотвратить наследование для части веб-конфигурации следующим образом:

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

20 голосов
/ 15 декабря 2008

Существует атрибут, который вы можете использовать в корневом файле web.config, чтобы его содержимое не наследовалось дочерними приложениями.

inheritInChildApplications

Блог о унаследованных приложениях

Статья MSDN об иерархии и наследовании файлов конфигурации ASP.NET

Поместите часть конфигурации, которая не предназначена для наследования, внутрь

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

Кажется, что разделы конфигурации невозможно не наследовать, но другие части конфигурации могут быть «закомментированы» таким образом и не наследуются.

15 голосов
/ 15 октября 2014

Если вы можете использовать 2 отдельных пула приложений, вы можете полностью остановить наследование, используя attibute enableConfigurationOverride="false" в файле applicationHost.config, как я описал в этом вопросе: «Запись уже добавлена» - два отдельных App Pools

<add name="MyAppPool" enableConfigurationOverride="false" autoStart="true" managedRuntimeVersion="v4.0" managedPipelineMode="Integrated" >
    <processModel identityType="NetworkService" />
</add>
8 голосов
/ 24 февраля 2014

По моему мнению, каждый раз, когда я боролся с этим, ответ в итоге оказывается НЕТ - и я оставляю это здесь, чтобы найти себя в будущем, чтобы он больше не тратил на это время.

Я обнаружил, что это огромная проблема, когда вы просто хотите добавить что-то в качестве виртуального каталога на существующий сайт. Со сложными файлами web.config я всегда заканчивал тем, что отказывался и перемещал его в другое приложение.

4 голосов
/ 15 декабря 2008

Я бы определенно определил все требуемые настройки - никогда не предполагайте, что какой-либо параметр по-прежнему имеет значение по умолчанию.

Например, если вы определяете connectionString, добавьте тег <clear /> перед <add name=... /> и т. Д. Для членства определите все атрибуты, включая имя файла cookie. И так далее.

Это может сделать файл немного больше, но это определенно поможет вам избежать сценария «но это сработало на моей коробке»: -)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...