Отключить наследование web.config?

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

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

Обновление: как говорит Стивен Баррис , использование <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>разделы не будет принимать заключено в теге ... так что я думаю , это только делает большую часть работы. Кто-нибудь знает, как это сделать лучше?

15.12.2008 01:46:12
не беспокойся; с 11+ лет в будущем. Я в процессе перемещения приложений на отдельные сайты, чтобы избежать такого рода глупостей. Не существует чистого способа справиться со сложным наследованием по многим причинам: 1) вообще не может отключить наследование определенных разделов; 2) не может выборочно отключить наследование частей других разделов; 3) подавление наследования (там, где оно работает), также непоследовательно блокирует наследование от прародителя (например, конфигурации хоста).
user2864740 10.02.2020 22:02:15
4 ОТВЕТА
РЕШЕНИЕ

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

inheritInChildApplications

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

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

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

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

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

20
21.02.2018 17:28:00
Существует проблема с этим подходом. Вы можете отключить наследование элементов в <system.web />, но это никак не влияет на часть <configSections />. Кто-нибудь знает, как отключить наследование элементов в <configSections />?
Ropstah 22.04.2009 12:03:12
Я не мог использовать "inheritInChildApplications", потому что VS не понравилось. Вместо этого я отрицаю то, на что IIS жаловался, используя тег <remove ... />. Это сработало для меня.
dyslexicanaboko 9.11.2012 23:13:14

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

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

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

5
15.12.2008 02:58:47
Не совсем то, что я ожидал от хорошего ответа, но, возможно, это наименее плохой вариант ...
dkretz 15.12.2008 03:05:53

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

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

9
30.09.2014 09:11:33
они исправляют это в «asp.next» или что-то еще?
Simon_Weaver 30.09.2014 09:10:42
Я не могу поверить, что нет способа переопределить это глобально! Какой черепок с ** т!
Gareth 1.09.2016 11:58:26

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

<add name="MyAppPool" enableConfigurationOverride="false" autoStart="true" managedRuntimeVersion="v4.0" managedPipelineMode="Integrated" >
    <processModel identityType="NetworkService" />
</add>
18
21.02.2018 17:31:12
Нет настроек интерфейса? Перечислено в docs.microsoft.com/en-us/iis/configuration/...
user2864740 10.02.2020 22:12:59
Не удалось использовать этот подход в IIS 10 даже при преобразовании папки верхнего уровня в новое приложение с отдельным пулом приложений. Добавлены настройки суб-приложения, где все еще наследуется от основного.
user2864740 10.02.2020 22:26:49