Как предотвратить наследование файла web.config для «configSections»? - PullRequest
14 голосов
/ 27 октября 2010

В моем файле конфигурации родительских веб-приложений есть следующее

<configuration>
  <configSections>
    <sectionGroup name="testmodule">
      <section name="testmodule" type="RewriteModule.RewriteModuleSectionHandler, RewriteModule"/>
    </sectionGroup>
  </configSections>
</configuration>

Я хочу запретить дочерним подпапкам наследовать этот раздел конфигурации, куда я должен поместить <location path="." inheritInChildApplications="false">, поскольку разделы конфигурации должны быть первым дочерним элементомфайл конфигурации

Ответы [ 5 ]

10 голосов
/ 27 октября 2010

На SO ответили пару раз, но, на мой взгляд, неправильно.

Документы довольно ясны (1) (2):

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

InheritInChildApplicationsсвойство применяется только к настройкам конфигурации, зависящим от местоположения.

Чтобы ответить на ваш вопрос, этого должно быть достаточно:

<configuration>
...
<sectionGroup name="testmodule">
    <section name="testmodule" type="RewriteModule.RewriteModuleSectionHandler, RewriteModule"/>
</sectionGroup>
...
<location path="." inheritInChildApplications="false">
    <testModule>
    ....
    </testModule>
</location>

(1) - http://msdn.microsoft.com/en-us/library/system.configuration.sectioninformation.inheritinchildapplications.aspx

(2) - http://msdn.microsoft.com/en-us/library/ms178692.aspx

6 голосов
/ 29 октября 2010

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

1 голос
/ 14 января 2012

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

это не идеально, ноэто работа вокруг, я использовал с успехом ....

0 голосов
/ 30 августа 2017

У меня такая же ситуация, как и у вас, поскольку мое корневое приложение использует AppPool .net 2.0, а дочерний AppPool - .Net 4.0.Я решил использовать предложение в «Запись уже добавлена» - два отдельных пула приложений , установив для обоих AppPools значение enableConfigurationOverride = "false", оно работает как шарм.

0 голосов
/ 09 января 2013

Мы получаем ошибки о дублировании директив конфигурации в одном из наших приложений. После расследования похоже, что это из-за этой проблемы .

Короче говоря, наш корневой веб-сайт - ASP.NET 3.5 (версия 2.0 с добавлением определенных библиотек), и у нас есть подпрограмма ASP.NET 4.0.

Наследование web.config заставляет вложенное приложение ASP.NET 4.0 наследовать файл web.config родительского приложения ASP.NET 3.5.

Однако глобальный (или «корневой») файл приложения ASP.NET 4.0 web.config, который находится в C: \ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \ Config \ web.config и C: \ Windows \ Microsoft.NET \ Framework64 \ v4.0.30319 \ Config \ web.config (в зависимости от вашей разрядности) уже содержит эти разделы конфигурации.

Приложение ASP.NET 4.0 затем пытается объединить корневой файл ASP.NET 4.0 web.config и родительский файл web.config (один для приложения ASP.NET 3.5) и работает с дубликатами в узле.

Единственное решение, которое мне удалось найти, - это удалить разделы конфигурации из родительского web.config, а затем либо

  1. Определите, что они вам не нужны в вашем корневом приложении, или
  2. Обновите родительское приложение до ASP.NET 4.0 (чтобы оно получало доступ к корневым файлам config.effig web.config)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...