面臨的問題
在大型web應用開發中,為了保證應用的質量,保證用戶 體驗,我們開發時總要經歷從開發,測試,beta到最終上線的過程。
因為不同的測試運行環境的參數都不同,所以在實際開發中我們可以 編寫多個web.config,每個web.config特定用於某個測試運行環境。這一切看上 去似乎順理成章,但隨著你的應用越做越大,web.config也會越來越大,而麻煩 也會隨之而來。
復雜的web.config是很難進行維護的,而且牽一發動全 身。比如你開發時有一個配置節要進行修改,那所有環境下的web.config對應的 節也都要做相應的修改。特別是在web.config很大,各種測試環境又多的情況下 ,SCM管理員肯定會抓狂的……
化整為零
幸運的是 ,從.net 2.0開始,微軟提供了configSource屬性來讓我們可以對web.config進 行拆分。讓我們來看個簡單的例子:
[Web.config]
...
<system.web>
...
<profile configSource="profile.config" />
...
</system.web>
...
[profile.config]
<profile>
<properties>
<add name="Name" type="String" />
<add name="Age" type="Int32" />
</properties>
</profile>
在上面的例子 中,我們對<system.web/profile>配置節進行了拆分,此配置節的具體配 置是存儲在另一個單獨文件profile.config中,而web.config只需要通過 configSource這個屬性來指明配置節的具體配置存儲在哪個文件中,web.config 就會在運行時自動去尋找到那個文件並加載。
在進行拆分時,我們需要 注意以下幾點:
只允許針對配置節(ConfigurationSection)進行拆分 ,而不能對配置節組(ConfigurationSectionGroup)或元素(Element)進行拆 分。
存儲配置節內容的文件的後綴名需要小心,理論上文件名可以任意 取,web.config都能讀取。但出於安全的考慮,我們的後綴名最好是不能直接通 過url訪問的文件類型,以防止洩漏配置信息。所以.config是可以考慮 的,.xml,.txt等後綴極力不推薦。
默認情況下,如果特定配置節的 config文件內容更改,iis是察覺不到的,所以不會重啟程序池。假如你需要在 特定配置節config文件修改後能讓iis自動察覺到並進行重啟,可以利用 RestartOnExternalChanges屬性,具體參見MSDN。