在web.config中引用外部組態檔

如果網站上線時間越久,然後,網站不斷更新、維護,你有可能會發現,我們慢慢在web.config組態檔裡加東加西,web.config慢慢的就會越來越「肥大」,肥大不是一件好事,所以就管理方面,我們也希望可以進行切割,就像Web一切割分成HTML、CSS、JavaScript一樣,尤其是在Visual Studio 2008 + .NET Framework 3.5之前,web.config可是一點都不小。

所謂的切割,就是把web.config裡的標籤分類後放到不同的檔案裡,檔案命名上也是以*.config來結尾,以方便管理,最後在web.config中進行引用,專業一點會把切割出來的組態檔稱:「外部組態檔」。

切割的方式非常的簡單,你可以在網站專案一開始就切割,或是網站專案完成,上線之前來進行切割,或上線之後再切割也行,反正就是當你感覺web.config的內容已經太多太大,每次找個東西都要上拉下拉,浪費不少時間時就適合切割。


一、建立外部組態檔

檔案命名上,我會依內容在web.config內的名稱來命名檔案名稱。例如:appSettings.config、connectionStrings.config,這樣一眼就可以看出來這個外部組態檔是放那個組態設定。

<?xml version="1.0"?>
<appSettings>
   <add key="CopyRight" value ="(c) Copyright 2010 KingKong Bruce Technology Inc."/>
</appSettings>

第一行一定要設定XML宣告,後面將原web.config的內容複製過來。

二、在web.config引用外部組態檔

外部組態檔的引用可以透過configSource屬性值定所要引用的組態檔是哪一個外部檔案。使用外部組態檔有以下幾個優點:

  1. 針對不同的項目設定,模組化的結構,方便管理
  2. 隨時改變外部組態檔,並不會重新啟動應用程式

第2點解釋一下,實際網站上線後,在以下幾種情況之下都會重新啟動網站應用程式,進而造成使用者的狀態維護失效:

  • 增、刪、修Bin目錄下的組件。
  • 增、刪、修App_GlobalResources或App_LocalResources目錄下的資源檔。
  • 增、刪、修Global.asax。
  • 增、刪、修App_Code目錄下的原始程式碼檔。
  • 增、刪、修Profile設定。
  • 增、刪、修App_WebReferences目錄下的Web參考。
  • 增、刪、修web.config。

也就是說,只要我們動到web.config任何設定,效果是立即馬上反應,但透過外部組態檔的方式,因為不是直接動到web.config檔案,所以不會立即生效,這點差異各位要了解,要讓外部組態檔中的設定生效,也簡單,就是不去理它,設定完成後的下一位Client User會自動使用新的設定來運作,而舊Client User不受影響。

在web.config中引用外部組態檔很簡單,在要設定的標籤加上configSource屬性即可,範例如下:

<appSettings configSource="appSettings.config" />
<connectionStrings configSource="connectionStrings.config" />

這樣就完成外部組態檔的設定。

2 則留言:

  1. 我看了很久你的文章

    但我不管再怎麼仔細的
    一個一個字看就是看不懂
    所以我想說
    我是否可以直接問你一些問題
    就是我只是在上網購物
    就出現了這個
    '/imagine' 應用程式中發生伺服器錯誤。
    --------------------------------------------------------------------------------

    執行階段錯誤
    描述: 伺服器上發生應用程式錯誤。此應用程式的目前自訂錯誤設定因安全性考量,防止他人從遠端看見應用程式錯誤的詳細資訊。然而,可以使用本機伺服器電腦上的瀏覽器檢視。

    詳細資料: 若要在遠端電腦檢視此特定錯誤訊息的詳細資訊,請於目前 Web 應用程式根目錄內的 "web.config" 組態檔中建立 標記。然後將 標記的 "mode" 屬性設為 "Off"。











    注意: 可以藉由修改應用程式 組態標記的 "defaultRedirect" 屬性,使其指向自訂錯誤頁面的 URL,以便使用自訂錯誤頁面取代您目前看到的錯誤頁面。









    這個東西真的讓我很頭大
    我查遍了關於這個問題的解釋
    但我還是不懂如何解決
    所以是否可以請你
    用沒那麼多專業術語的話
    解釋給我聽
    真的拜託拜託你

    回覆刪除
  2. 你去買東西的那個網頁"有問題",所那會出現那個"錯誤訊息",那不關你的事。

    回覆刪除

感謝您的留言,如果我的文章你喜歡或對你有幫助,按個「讚」或「分享」它,我會很高興的。