[研究]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 決定。
🔍 範例說明
假設網站執行時讀取設定的順序是:
- IIS 啟動應用程式 → 讀取 applicationHost.config
- 載入對應站台的 IIS 層 web.config
- 啟動 .NET CLR → 載入 machine.config
- 套用 Framework 根層 web.config
- 套用網站專屬 Web.config
- 最終合併為執行期的有效設定
✅ 小結
| 層級 | 設定檔 | 主導範圍 | 是否可被覆寫 |
|---|---|---|---|
| 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...) │
│ 不屬於設定檔,但與設定密切相關 │
└────────────────────────────────────────────┘
|
(完)
沒有留言:
張貼留言