148 votes

Éviter web.config de l'héritage des enfants d'application web à l'aide de inheritInChildApplications

Je suis en train d'ajouter

<location inheritInChildApplications="false">

à mon parent web web de l'application.la configuration, mais il ne semble pas fonctionner.

Mes parents web.config a:

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

Mon enfant de l'application web est installé comme une application dans IIS, et hérite de l'objet parent, web.config qui est à l'origine des problèmes.

Exactement où dois-je placer les

<location inheritInChildApplications="false">

donc, il ignore tous les web différents.paramètres de configuration?

197voto

Nick Cecil Points 1215

Comme les intervenants pour la réponse précédente mentionné, vous ne pouvez pas simplement ajouter la ligne

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

Juste en dessous de <configuration>. Au lieu de cela, vous avez besoin d'envelopper le web individuel.sections de configuration pour laquelle vous souhaitez désactiver l'héritage. Par exemple:

<!-- 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>

Alors qu' <clear /> peut fonctionner pour certaines sections de configuration, il ya certains qui nécessitent au contraire un <remove name="..."> directive, et d'autres encore ne semblent pas à l'appui. Dans ces situations, il est sans doute opportun de fixer inheritChildApplications="false".

64voto

Andrew Hare Points 159332

Il faut aller directement sous la racine <configuration> nœud et vous avez besoin de définir un chemin d'accès comme ceci:

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

Une meilleure façon de gérer la configuration de l'héritage est d'utiliser un <clear/> chez l'enfant de config où vous ne voulez pas hériter. Donc, si vous ne voulez pas hériter de la mère de la config de chaînes de connexion que vous feriez quelque chose comme ceci:

<?xml version="1.0"?>
<configuration>
    <connectionStrings>
        <clear/>
        <!-- Child config's connection strings -->
    </connectionStrings>
</configuration>

23voto

cryss Points 974

J'ai tout mis dans:

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

à l'exception de: <configSections/>, <connectionStrings/> et <runtime/>.

Il existe des cas où nous ne voulons pas hériter d'un secions de <configSections />, mais nous ne pouvons pas mettre <section/> balise en <location/>, nous avons donc créer un <secionGroup /> et de mettre nos les sections indésirables dans le groupe. La Section des groupes peut ensuite être insérée dans un emplacement de la balise.

Nous devons donc modifier ce:

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

Dans:

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

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

8voto

Kenneth Garza Points 797

Nous avons été faire une erreur liées à ce après une récente publication de code à l'un de nos environnements de développement. Nous avons une application qui est un enfant d'une autre application. Cette relation a été fonctionne bien pendant des ANNÉES, jusqu'à hier.

Le problème:
Nous avons été faire un jaune trace de la pile d'erreur en raison de dupliquer des clés d'entrées. C'est parce que à la fois le web.config pour l'enfant et le parent demandes avaient cette clé. Mais cela existe depuis de nombreuses années comme ça, sans changement. Pourquoi tout d'un coup c'est un problème maintenant?

La solution:
La raison pour laquelle cela n'a jamais été un problème, c'est parce que les clés ET les valeurs sont toujours les mêmes. Hier, nous avons mis à jour nos chaînes de connexion SQL pour inclure le Nom de l'Application dans la chaîne de connexion. Ce qui fait que la chaîne de caractères unique et tout d'un coup commencé à échouer.

Sans faire des recherches sur la raison exacte pour cela, je dois supposer que, lorsque la demande pour un enfant hérite des parents web.config valeurs, il ignore identiques paires clé/valeur.

Nous avons été en mesure de le résoudre par emballage de la chaîne de connexion comme ceci

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

Edit: j'ai oublié de mentionner que j'ai ajouté ceci dans le PARENTS web.config. Je n'ai pas eu à modifier l'enfant du web.config.

Merci pour chacuns de l'aide sur ce, a sauvé les fesses.

2voto

Mark Points 859

Microsoft, qui est la page sur l' location balise: http://msdn.microsoft.com/en-us/library/b6x6shw7%28v=vs.100%29.aspx

Il peut être utile à certaines personnes.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X