現在、IIS7にはASP.NET 3.5 Webアプリケーションが2つあります(WebParentおよびWebChildと呼びます)。
WebChildは、IIS7のWebParentリスト内にネストされ、(WebParent内の単なる仮想ディレクトリではなく)アプリケーションとして設定されます。どちらも現在、独自の(クラシック)アプリケーションプールを使用しています。
WebParentとWebChildは両方とも、独自のルートディレクトリに独自の完全に定義されたweb.configファイルを持っています。
WebChildはIIS内の「アプリケーション」として定義されているため、WebParent構成ファイルから何も継承しないと想定していました。ただし、この構成にもかかわらず、すでに定義されているweb.config内のさまざまな要素に関連するエラーが表示されます(これは正しいです。両方の構成ファイルにいくつかの項目がありますが、1つとは完全に独立して処理する必要があると思いました別)?
なぜこれが起こっているのかを誰かが明確にできますか?
繰り返される場合は、<remove/>
次に、最初に子アプリケーションのweb.configで、配置する要素を追加します。これは、別の値を設定することを想定しています。そうでない場合は、要素を省略してください。接続文字列は、すべてのアプリケーションに共通する可能性が高いものの良い例です。そのため、ルートでのみ指定する必要があります。
例:
<siteMap defaultProvider="AdminSiteMapProvider" enabled="true">
<providers>
<remove name="AdminSiteMapProvider"/>
<add name="AdminSiteMapProvider" description="Admin SiteMap provider" type="System.Web.XmlSiteMapProvider" siteMapFile="~/App_Data/admin.sitemap" securityTrimmingEnabled="true" />
</providers>
</siteMap>
問題の正確な解決策は、表示されている構成例外メッセージによって異なります。ただし、これは一般的な問題であり、 "WebParent"のweb.configのlocation要素で inheritInChildApplications 属性を使用して解決できることがよくあります。 system.webセクション全体を次のようにlocation要素でラップすることにより、説明した問題を解消できるはずです。
<location path="." inheritInChildApplications="false">
<system.web>
<!-- ... -->
</system.web>
</location>
IIS 7の場合、system.WebServerセクションも同じようにラップする必要があります。
<location path="." inheritInChildApplications="false">
<system.webServer>
<!-- ... -->
</system.webServer>
</location>
この解決策は、私が見つけた優れたブログ記事 here に基づいています。
InheritInChildApplications = "false"は、構成の一部を親から継承したい場合に適しています。継承を完全に停止したい場合(この場合、私が正しい場合)、2つのアプリケーションに2つの個別のアプリケーションプールを使用して、applicationHost.configファイルに十分に文書化されていない設定を適用することをお勧めしますこの質問で説明したように 「エントリはすでに追加されています」-2つの個別のアプリケーションプール
<add name="MyAppPool" autoStart="true" managedRuntimeVersion="v4.0" managedPipelineMode="Integrated" enableConfigurationOverride="false">
<processModel identityType="NetworkService" />
</add>