Отключить наследование web.config?
У меня есть приложение для управления контентом в корневом каталоге моего сайта, и я пытаюсь использовать другое приложение (приложение для выставления счетов) в подпапке. К сожалению, web.config корневого сайта мешает суб-приложению.
Есть ли способ отключить наследование web.config для подпапки?
Update:
Как указано Стивеном Беррисом, использование тега <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>
не будут приняты в тег... поэтому я думаю, что это делает большую часть работы. Кто-нибудь знает, как это сделать лучше?
Ответы
Ответ 1
Существует атрибут, который вы можете использовать в корневом файле web.config, чтобы он не унаследовал его содержимое дочерними приложениями.
inheritInChildApplications
Блог о inheritInChildApplications
Статья MSDN по описанию и наследованию конфигурационного файла ASP.NET
Ответ 2
Если вы можете использовать 2 отдельных пула приложений, вы можете полностью остановить наследование, используя attibute в файле applicationHost.config, как я описал в этом вопросе: "Запись уже добавлена" - Два отдельных пула приложений
<add name="MyAppPool" enableConfigurationOverride="false" autoStart="true" managedRuntimeVersion="v4.0" managedPipelineMode="Integrated" >
<processModel identityType="NetworkService" />
</add>
Ответ 3
По-моему, каждый раз, когда я боролся с этим, ответ заканчивается тем, что он эффективно НЕТ - и я оставляю это здесь для своего будущего себя, чтобы найти, чтобы он больше не тратил на него больше времени.
Я обнаружил, что это огромная проблема, когда вы просто хотите добавить что-то в качестве виртуального каталога внутри существующего сайта. С сложными файлами web.config я всегда просто отказался и переместил его в другое приложение.
Ответ 4
Я бы явным образом определял все необходимые настройки - никогда не предполагайте, что любой параметр по-прежнему установлен на значение по умолчанию.
Например, если вы определяете connectionString, добавьте тег <clear />
перед <add name=... />
и т.д. Для Membership определите все атрибуты, включая имя файла cookie. И так далее.
Это может сделать файл немного больше, но он определенно поможет вам избежать сценария "но он работал и на моем ящике": -)