これは、ASP.NET 構成の階層です。おそらく、これはどの設定が互いに上書きされるかを理解するのに役立つかもしれません。
サーバ
Machine.config: Machine.config ファイルには、サーバー上のすべての Web アプリケーションの ASP.NET スキーマが含まれています。このファイルは、構成マージ階層の最上位にあります。
ルート Web
Web.config: サーバーの Web.config ファイルは Machine.config ファイルと同じディレクトリに格納され、ほとんどの system.web 構成セクションの既定値が含まれています。実行時に、このファイルは構成階層の上から 2 番目にマージされます。
Webサイト
Web.config: 特定の Web サイトの Web.config ファイルには、その Web サイトに適用され、サイトのすべての ASP.NET アプリケーションとサブディレクトリを通じて下位に継承される設定が含まれています。
ASP.NET アプリケーションのルート ディレクトリ
Web.config: 特定の ASP.NET アプリケーションの Web.config ファイルは、アプリケーションのルート ディレクトリにあり、Web アプリケーションに適用され、そのブランチのすべてのサブディレクトリを継承する設定が含まれています。
ASP.NET アプリケーションのサブディレクトリ
Web.config: アプリケーション サブディレクトリの Web.config ファイルには、このサブディレクトリに適用され、そのブランチ内のすべてのサブディレクトリを通じて下位に継承される設定が含まれています。
クライアント アプリケーション ディレクトリ
ApplicationName.config: ApplicationName.config ファイルには、Windows クライアント アプリケーション (Web アプリケーションではない) の設定が含まれています。
どの ASP.NET ファイルとフォルダーがフォルダーとアプリケーションを介して継承されるかを理解することは、開発とトラブルシューティングにとって非常に重要です。
以下に簡単な要約を示します。
- web.config ファイルは、すべてのアプリケーションの境界を越えて、ツリー全体を継承します。
- global.asax はそのアプリケーション内にのみ存在します
- /bin と /app_{folders} はアプリケーション内にのみ存在します
したがって、これは、一部のフォルダーがアプリケーションとしてマークされていても、ルート web.config ファイルで設定されたものはすべてサイト全体に継承されることを意味します。
これが厄介になるのは、web.config ファイルにアセンブリへの参照があるが、サブアプリケーションにそれらのアセンブリがない場合です。たとえば、サイトのルートに構成された HTTP モジュールがあり、サイトの web.config ファイルから参照されているとします。アプリケーションとしてマークされた /subfolder というサブアプリケーションがある場合、/subfolder は /subfolder/bin から HTTP ハンドラーをロードしようとします。存在しないため、エラーがスローされます。
これには複数の方法があります。/subfolder で HTTP ハンドラーが必要ない場合、おそらく最もクリーンな方法は、/subfolder/web.config ファイルに句を追加して参照を「削除」することです。でこれを行うことができます。サブフォルダー内の HTTP モジュールを削除する方法の例を次に示します。
<httpModules>
<remove name="ErrorLog"/>
</httpModules>
サイトの web.config は次のようになります。
<httpModules>
<add name="ErrorLog" type="GotDotNet.Elmah.ErrorLogModule, GotDotNet.Elmah, Version=1.0.5527.0, Culture=neutral, PublicKeyToken=978d5e1bd64b33e5" />
</httpModules>print("code sample");