2025年11月5日 星期三

[研究]ASP.NET WebForm 網站的設定檔和繼承關係

[研究]ASP.NET WebForm 網站的設定檔和繼承關係

2025-11-05

********************************************************************************

ASP.NET WebForm 網站的設定檔和繼承關係

ChatGPT

🧩 ASP.NET WebForm 網站常見設定檔案與層級

ASP.NET 在 IIS 環境下的設定檔主要分為「IIS 層級」與「.NET 應用程式層級」,實際上有 4~5 個層級的設定檔會影響網站行為。

🔹 一、IIS 層級設定檔

層級 檔案 路徑 說明
1. 全系統層 (IIS 全域設定) applicationHost.config C:\Windows\System32\inetsrv\config\applicationHost.config 包含所有 IIS 站台、應用程式集區、虛擬目錄、Handler Mappings、Module、Authentication、Bindings 等設定。✅ 這是 IIS 最上層的設定檔。
2. IIS 網站 / 虛擬目錄層 web.config(IIS 層設定) 位於每個站台或應用程式根目錄 可覆寫部分 IIS 設定(例如認證、Handler、Modules 等)。⚠️ IIS 會從 applicationHost.config 繼承,再覆寫此層設定。

🔹 二、.NET Framework 層級設定檔

層級 檔案 路徑 說明
3. .NET 全域層 (machine.config) machine.config - 64 位元: C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Config\machine.config - 32 位元: C:\Windows\Microsoft.NET\Framework\v4.0.30319\Config\machine.config 定義整個伺服器上所有 .NET 應用程式的預設設定,例如:<system.web><connectionStrings><compilation><httpRuntime> 等。
4. 根 Web.config (Framework 根層) web.config 同 machine.config 目錄下:C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Config\web.config 為所有 ASP.NET 應用程式的「共同基底設定」,例如 <pages><httpHandlers><httpModules> 的預設定義。
5. 應用程式層 (你的網站 Web.config) Web.config 位於網站應用程式根目錄,例如 C:\inetpub\wwwroot\MySite\Web.config 針對單一網站應用設定,例如連線字串、驗證模式、授權、客製化錯誤頁等。

🔹 三、可能存在的補充檔案(非必然)

類別 檔案 說明
使用者設定檔 web.debug.config / web.release.config 用於 Visual Studio 發佈時的轉換設定(Transform)。
全域應用設定 global.asax 處理應用程式事件(例如 Application_StartSession_Start)。
組件組態 <assembly>.config 若使用獨立組件 (如 EXE 或 DLL),可有自己的設定檔。

🧬 各層繼承關係 (由上而下)

applicationHost.config      ← (IIS 全域)
      ↓
[站台或應用程式] web.config (IIS層)
      ↓
machine.config              ← (.NET 全域)
      ↓
Framework 根 web.config     ← (.NET 預設 Web 設定)
      ↓
網站 Web.config             ← (你的專案)


👉 繼承規則:

  • 下層可覆寫上層設定(如果允許)。
  • 若上層設定 <section> 的 overrideModeDefault="Deny",則下層不能覆寫。
  • 有些區段 (如 <system.webServer>) 屬於 IIS 管轄,由 IIS 決定繼承邏輯。
  • 有些區段 (如 <system.web>) 屬於 .NET Framework 管轄,由 ASP.NET Runtime 決定。

🔍 範例說明

假設網站執行時讀取設定的順序是:
  1. IIS 啟動應用程式 → 讀取 applicationHost.config
  2. 載入對應站台的 IIS 層 web.config
  3. 啟動 .NET CLR → 載入 machine.config
  4. 套用 Framework 根層 web.config
  5. 套用網站專屬 Web.config
  6. 最終合併為執行期的有效設定

✅ 小結

層級 設定檔 主導範圍 是否可被覆寫
IIS 全域 applicationHost.config 站台、App Pool 部分可(由 overrideMode 控制)
IIS 應用層 web.config(站台) 單一網站
.NET 全域 machine.config 所有 .NET 程式
.NET 預設 Web.config Framework 預設 所有 ASP.NET 網站
應用程式層 Web.config(網站) 單一網站 最終生效設定


**********

以下是 ASP.NET WebForm 設定檔案的繼承層級圖(純文字版),從最高層的 IIS 系統設定一路到網站自己的 Web.config。

┌────────────────────────────────────────────┐
│        IIS 全域設定層 (最上層)             │
│  C:\Windows\System32\inetsrv\config\       │
│      └── applicationHost.config            │
│  ● 定義所有網站、AppPool、模組、繫結等      │
└────────────────────────────────────────────┘
                       │
                       ▼
┌────────────────────────────────────────────┐
│        IIS 應用程式/站台層                 │
│  站台根目錄 (例如 C:\inetpub\wwwroot\MySite)│
│      └── web.config                        │
│  ● 可覆寫部分 IIS 設定 (system.webServer)   │
└────────────────────────────────────────────┘
                       │
                       ▼
┌────────────────────────────────────────────┐
│        .NET Framework 全域設定層           │
│  C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Config\
│      └── machine.config                    │
│  ● 定義所有 .NET 應用程式共用的設定         │
│    (如 compilation, httpRuntime, connectionStrings) │
└────────────────────────────────────────────┘
                       │
                       ▼
┌────────────────────────────────────────────┐
│        ASP.NET Framework 根設定層          │
│  C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Config\
│      └── web.config                        │
│  ● 定義 ASP.NET 預設設定 (如 handlers、modules) │
└────────────────────────────────────────────┘
                       │
                       ▼
┌────────────────────────────────────────────┐
│        應用程式專屬設定層 (網站層)         │
│  例如:C:\inetpub\wwwroot\MySite\Web.config│
│  ● 覆寫上層設定,加入網站專屬項目           │
│    (authentication, authorization, customErrors) │
└────────────────────────────────────────────┘
                       │
                       ▼
┌────────────────────────────────────────────┐
│       (可選) Web.config Transform 檔案      │
│  Web.Debug.config / Web.Release.config     │
│  ● 發佈時由 Visual Studio 自動套用轉換      │
└────────────────────────────────────────────┘
                       │
                       ▼
┌────────────────────────────────────────────┐
│       (可選) global.asax                   │
│  ● 定義應用程式事件 (Application_Start...)  │
│    不屬於設定檔,但與設定密切相關           │
└────────────────────────────────────────────┘


(完)

沒有留言:

張貼留言