Unikaj sieci.dziedziczenie config w dziecięcej aplikacji internetowej przy użyciu inheritInChildApplications

Próbuję dodać

<location inheritInChildApplications="false">

Do mojej macierzystej aplikacji internetowej.config ale to chyba nie działa.

Mojego rodzica web.config ma:

<configuration>
    <configSections>
    </configSections>

    // 10 or so custom config sections like log4net, hibernate,

    <connectionStrings>
    </connectionStrings>

    <appSettings>
    </appSettings>

    <system.diagnostics>
    </system.diagnostics>

    <system.web>
         <webParts>
         </webParts>
         <membership>
         </membership>

         <compilation>
         </compilation>
    </system.web>

    <location ..>
    <system.web>
        </system.web>
    </location>

    <system.webServer>
    </system.webServer>

Moja dziecięca aplikacja webowa jest skonfigurowana jako aplikacja w IIS i dziedziczy po rodzicu web.config, co powoduje problemy.

Gdzie dokładnie powinienem umieścić

<location inheritInChildApplications="false">

Więc ignoruje wszystkie różne sieci.ustawienia konfiguracji?

Author: Peter Mortensen, 2009-04-23

7 answers

Jak wspomniali komentatorzy poprzedniej odpowiedzi, nie można po prostu dodać linijki...

<location path="." inheritInChildApplications="false">

...poniżej <configuration>. Zamiast tego musisz owinąć pojedynczą sieć.sekcje config, dla których chcesz wyłączyć dziedziczenie. Na przykład:

<!-- disable inheritance for the connectionStrings section -->
<location path="." inheritInChildApplications="false">
   <connectionStrings>
   </connectionStrings>
</location>

<!-- leave inheritance enabled for appSettings -->
<appSettings>
</appSettings>

<!-- disable inheritance for the system.web section -->
<location path="." inheritInChildApplications="false">
   <system.web>
        <webParts>
        </webParts>
        <membership>
        </membership>

        <compilation>
        </compilation>
      </system.web>
 </location>

Podczas gdy <clear /> może działać dla niektórych sekcji konfiguracyjnych, niektóre wymagają dyrektywy <remove name="...">, a inne wydają się nie wspierać. W takich sytuacjach prawdopodobnie właściwe jest ustawienie inheritInChildApplications="false".

 186
Author: Nick Cecil,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-05-11 19:54:29

Musi przejść bezpośrednio pod główny węzeł <configuration> i musisz ustawić ścieżkę w ten sposób:

<?xml version="1.0"?>
<configuration>
    <location path="." inheritInChildApplications="false"> 
        <!-- Stuff that shouldn't be inherited goes in here -->
    </location>
</configuration>

Lepszym sposobem radzenia sobie z dziedziczeniem konfiguracji jest użycie <clear/> w konfiguracji potomka, gdzie nie chcesz dziedziczyć. Więc jeśli nie chcesz dziedziczyć łańcuchów połączeń konfiguracyjnych rodzica, zrób coś takiego:

<?xml version="1.0"?>
<configuration>
    <connectionStrings>
        <clear/>
        <!-- Child config's connection strings -->
    </connectionStrings>
</configuration>
 59
Author: Andrew Hare,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-04-23 15:44:24

Wkładam wszystko do:

<location path="." inheritInChildApplications="false">
....
</location>

Z wyjątkiem: <configSections/>, <connectionStrings/> i <runtime/>.

Są przypadki, kiedy nie chcemy dziedziczyć sekcji z <configSections />, ale nie możemy umieścić znacznika <section/> w <location/>, więc musimy utworzyć <secionGroup /> i umieścić nasze niechciane sekcje w tej grupie. Grupy sekcji mogą być później wstawiane do znacznika lokalizacji.

Więc musimy to zmienić:

<configSections>
  <section name="unwantedSection" />
</configSections>

Do:

<configSections>
  <sectionGroup name="myNotInheritedSections">
    <section name="unwantedSection" />
  </sectionGroup>
</configSections>

<location path="." inheritInChildApplications="false">
    <myNotInheritedSections>
        <unwantedSection />
    </myNotInheritedSections>
</location>
 19
Author: cryss,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-06-27 12:35:32

Otrzymywaliśmy błąd związany z tym po niedawnym wydaniu kodu do jednego z naszych środowisk programistycznych. Mamy aplikację, która jest dzieckiem innej aplikacji. Ten związek działa dobrze od lat, aż do wczoraj.

Problem:
Otrzymywaliśmy błąd śledzenia żółtego stosu z powodu wprowadzania zduplikowanych kluczy. Dzieje się tak dlatego, że zarówno sieć.config dla aplikacji potomnych i rodzicielskich miał ten klucz. Ale to istniało przez wiele lat jak to bez zmian. Dlaczego nagle jest to problem teraz?

Rozwiązanie:
Powodem, dla którego nigdy nie było to problemem, jest to, że klucze i wartości były zawsze takie same. Wczoraj zaktualizowaliśmy nasze łańcuchy połączeń SQL, aby zawierały nazwę aplikacji w łańcuchu połączeń. To sprawiło, że struna była wyjątkowa i nagle zaczęła zawodzić.

Nie robiąc żadnych badań nad dokładnym powodem tego, muszę założyć, że gdy aplikacja dziecka dziedziczy sieć rodziców.config wartości, ignoruje identyczne pary klucz / wartość.

Udało nam się go rozwiązać, owijając łańcuch połączeń w ten sposób

    <location path="." inheritInChildApplications="false">
        <connectionStrings>
            <!-- Updated connection strings go here -->
        </connectionStrings>
    </location>

Edit: zapomniałem wspomnieć, że dodałem to w sieci rodziców.config. Nie musiałem modyfikować dziecięcej sieci.config.

Dzięki za pomoc w tym wszystkim, uratowaliśmy nasze tyłki.

 8
Author: Kenneth Garza,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-04-10 20:42:20

Jeśli (Jak rozumiem) próbujesz całkowicie zablokować dziedziczenie w konfiguracji internetowej aplikacji dziecka, sugeruję, abyś unikał używania tagu w sieci.config. Zamiast tego utwórz nową aplikację i edytuj applicationHost.plik konfiguracyjny (znajduje się w %WINDIR%\System32 \ Inetsrv \ Config i %WINDIR% \ SysWOW64 \ inetsrv \ config). Wystarczy znaleźć wpis dla swojego apppool i dodać atrybut enableConfigurationOverride="false" Jak w poniższym przykładzie:

<add name="MyAppPool" autoStart="true" managedRuntimeVersion="v4.0" managedPipelineMode="Integrated" enableConfigurationOverride="false">
    <processModel identityType="NetworkService" />
</add>

Pozwoli to uniknąć dziedziczenia konfiguracji w aplikacje obsługiwane przez MyAppPool.

Matteo

 5
Author: Matteo Sganzetta,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-06-17 09:40:54

To jest strona Microsoftu na location tag: http://msdn.microsoft.com/en-us/library/b6x6shw7%28v=vs.100%29.aspx

To może być pomocne dla niektórych ludzi.
 2
Author: Mark,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-07-15 14:54:41

Otrzymujemy błędy dotyczące zduplikowanych dyrektyw konfiguracyjnych w jednej z naszych aplikacji. Po zbadaniu wygląda na to, że to z powodu tego problemu .

W skrócie, nasza strona główna jest ASP.NET 3.5 (czyli 2.0 z dodanymi konkretnymi bibliotekami), i mamy podprogram, który jest ASP.NET 4.0.

Www.dziedziczenie config powoduje ASP.NET 4.0 podprogram dziedziczenia sieci.plik konfiguracyjny rodzica ASP.NET 3.5 zastosowanie.

Jednak ASP.NET 4, 0 globalna (lub" root") strona internetowa aplikacji.config, który znajduje się na C:\Windows\Microsoft.NET\Framework\v4.0.30319\Config\web.config oraz C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Config\web.config (w zależności od bitowości), zawiera już te sekcje konfiguracyjne.

The ASP.NET 4.0 aplikacja następnie próbuje połączyć ze sobą root ASP.NET 4.0 web.config, oraz sieć nadrzędną.config (the one for an ASP.NET 3.5 app), i działa na duplikaty w węźle.

The only solution I ' ve been w stanie znaleźć jest usunięcie sekcji konfiguracyjnych z sieci nadrzędnej.config, a następnie

  1. ustal, że nie potrzebujesz ich w swojej aplikacji root, lub jeśli to zrobisz
  2. uaktualnij aplikację nadrzędną do ASP.NET 4.0 (zyskuje więc dostęp do sieci głównej.config ' s configSections)
 1
Author: Josh,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-06-06 10:12:28