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_Start、Session_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...)  │
│    不屬於設定檔,但與設定密切相關           │
└────────────────────────────────────────────┘


(完)

沒有留言:

張貼留言