私は追加しようとしています
<location inheritInChildApplications="false">
親のWebアプリケーションのweb.configに追加しましたが、機能していないようです。
私の親のweb.config
には:
<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>
私の子WebアプリケーションはIISのアプリケーションとしてセットアップされており、親のweb.config
から継承しているため、問題が発生しています。
正確にどこに置くべきですか
<location inheritInChildApplications="false">
だから、すべてのさまざまなweb.config設定を無視しますか?
前の回答のコメント者が述べたように、単に行を追加することはできません...
<location path="." inheritInChildApplications="false">
...<configuration>
のすぐ下。代わりに、継承を無効にする個々のweb.configセクションをラップする必要があります。例えば:
<!-- 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>
<clear />
は一部の構成セクションで機能する場合がありますが、代わりに<remove name="...">
ディレクティブを必要とするものもありますが、まだサポートしていないものもあります。これらの状況では、inheritInChildApplications="false"
を設定することがおそらく適切です。
ルート<configuration>
ノードの下に直接移動する必要があり、次のようなパスを設定する必要があります。
<?xml version="1.0"?>
<configuration>
<location path="." inheritInChildApplications="false">
<!-- Stuff that shouldn't be inherited goes in here -->
</location>
</configuration>
構成の継承を処理するためのより良い方法は、継承したくない場所で子構成で<clear/>
を使用することです。したがって、親構成の接続文字列を継承したくない場合は、次のようにします。
<?xml version="1.0"?>
<configuration>
<connectionStrings>
<clear/>
<!-- Child config's connection strings -->
</connectionStrings>
</configuration>
私はすべてを入れます:
<location path="." inheritInChildApplications="false">
....
</location>
例外:<configSections/>
、<connectionStrings/>
、<runtime/>
。
<configSections />
からいくつかのセクションを継承したくない場合もありますが、<section/>
タグを<location/>
に入れることができないため、<secionGroup />
を作成して不要なセクションをそのグループに入れる必要があります。セクショングループは、後でロケーションタグに挿入できます。
したがって、これを変更する必要があります。
<configSections>
<section name="unwantedSection" />
</configSections>
に:
<configSections>
<sectionGroup name="myNotInheritedSections">
<section name="unwantedSection" />
</sectionGroup>
</configSections>
<location path="." inheritInChildApplications="false">
<myNotInheritedSections>
<unwantedSection />
</myNotInheritedSections>
</location>
開発環境の1つにコードを最近リリースした後、これに関連するエラーが発生していました。別のアプリケーションの子であるアプリケーションがあります。この関係は、昨日までYEARSで正常に機能していました。
問題:
重複キーが入力されたため、黄色のスタックトレースエラーが発生していました。これは、子および親アプリケーションのweb.configの両方にこのキーがあったためです。しかし、これはこのように何年も変わらずに存在していました。なぜ今突然問題が発生するのでしょうか?
ソリューション:
これが問題にならなかった理由は、キーと値が常に同じだったからです。昨日、SQL接続文字列を更新して、接続文字列にアプリケーション名を含めました。これにより文字列が一意になり、突然すべてが失敗し始めました。
この正確な理由について調査することなく、子アプリケーションが親のweb.config値を継承する場合、同一のキー/値のペアを無視すると仮定する必要があります。
このように接続文字列をラップすることで解決できました
<location path="." inheritInChildApplications="false">
<connectionStrings>
<!-- Updated connection strings go here -->
</connectionStrings>
</location>
編集: PARENTS web.configにこれを追加したことを忘れていました。子供のweb.configを変更する必要はありませんでした。
みんな助けてくれてありがとう、私たちの尻を救った。
(私が理解しているように)子アプリケーションのWeb設定で継承を完全にブロックしようとしている場合、web.configでタグを使用しないようにすることをお勧めします。代わりに、新しいアプリケーションプールを作成し、applicationHost.configファイル(%WINDIR%\ System32\inetsrv\Configおよび%WINDIR%\ SysWOW64\inetsrv\configにある)を編集します。次の例のように、アプリケーションプールのエントリを見つけて、属性enableConfigurationOverride="false"
を追加するだけです。
<add name="MyAppPool" autoStart="true" managedRuntimeVersion="v4.0" managedPipelineMode="Integrated" enableConfigurationOverride="false">
<processModel identityType="NetworkService" />
</add>
これにより、MyAppPoolが提供するアプリケーションでの構成の継承が回避されます。
マッテオ
これはMicrosoftのlocation
タグに関するページです。 http://msdn.Microsoft.com/en-us/library/b6x6shw7%28v=vs.100%29.aspx
それは一部の人々に役立つかもしれません。
アプリの1つで構成ディレクティブが重複しているというエラーが発生しています。調査後、 この問題 が原因であるように見えます。
簡単に言うと、ルートWebサイトはASP.NET 3.5(特定のライブラリが追加された2.0)であり、ASP.NET 4.0であるサブアプリケーションがあります。
web.configの継承により、ASP.NET 4.0サブアプリケーションは親ASP.NET 3.5アプリケーションのweb.configファイルを継承します。
ただし、C:\ Windows\Microsoft.NET\Framework\v4.0.30319\Config\web.configおよびC:\ Windows\MicrosoftにあるASP.NET 4.0アプリケーションのグローバル(または「ルート」)web.config。 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からconfigセクションを削除してから、