連接字串、應用程式設定等敏感資訊不宜直接提交至版控系統,且不同環境 (Dev/Test/Prod) 設定不同。configSource 屬性可將特定區段外部化,實現「配置與代碼分離、環境隔離、權限管控」。
<configuration> <connectionStrings configSource="configs\db.config" /> <appSettings configSource="configs\appsettings.config" /> </configuration>
<connectionStrings> 對應 <connectionStrings> 根節點。<connectionStrings configSource="Config\ConnectionStrings.config" />
<connectionStrings>
<add name="DefaultConnection"
connectionString="Data Source=.;Initial Catalog=MyDb;Integrated Security=True"
providerName="System.Data.SqlClient" />
<add name="ReportConnection"
connectionString="Data Source=ReportSrv;Initial Catalog=ReportDb;User Id=rep;Password=pwd"
providerName="System.Data.SqlClient" />
</connectionStrings>
// 連接字串 string connStr = ConfigurationManager.ConnectionStrings["DefaultConnection"].ConnectionString; // AppSettings string uploadPath = ConfigurationManager.AppSettings["UploadPath"];
/Config
/ConnectionStrings.config ← 預設 (開發環境)
/ConnectionStrings.Prod.config ← 生產環境
/ConnectionStrings.Test.config ← 測試環境
# 部署至生產環境時 Copy-Item "Config\ConnectionStrings.Prod.config" "Config\ConnectionStrings.config" -Force
| 限制 | 說明 | 替代方案 |
|---|---|---|
| 不支援巢狀區段 | 如 <system.web> 內的子區段無法單獨外部化 | 使用 configSource 整個 system.web 區段 (罕見) |
| 外部檔案變更不會自動重啟應用程式 | 修改後需手動回收 AppPool 或觸發 Web.config 異動 | 監控檔案變更自動 Touch Web.config |
| ASP.NET Core 不支援 configSource | Core 使用 JSON/環境變數/KeyVault 等新配置模型 | 遷移至 appsettings.json + IConfiguration |
configSource 是傳統 ASP.NET 實現配置外部化最原生、零依賴的方案。嚴守三大鐵律,結合部署流程自動切換環境配置,即可安全、優雅地管理敏感設定。遷移至 ASP.NET Core 時,請改用新配置系統。